b********e 发帖数: 693 | 1 what will happen if free an object in stack?
I did a test
A.
Class A{
public:
~A(){cout << "Destructor" << endl:}
}
int test()
{
A a;
free(&a);
return 0;
}
after the program run, it seems good, and print out Destructor
but after I insert one line into the func, the pgram crash
int test()
{
A a
free(&a);
cout << "test " << endl;
return 0;
} |
s*********t 发帖数: 1663 | 2 free ???
【在 b********e 的大作中提到】 : what will happen if free an object in stack? : I did a test : A. : Class A{ : public: : ~A(){cout << "Destructor" << endl:} : } : int test() : { : A a;
|
s*******a 发帖数: 42 | 3 free????????????????????????????/ |
Q****r 发帖数: 7340 | 4 更正一个,object在heap上
不在stack上
【在 b********e 的大作中提到】 : what will happen if free an object in stack? : I did a test : A. : Class A{ : public: : ~A(){cout << "Destructor" << endl:} : } : int test() : { : A a;
|
s***e 发帖数: 793 | 5 no idea.
U can attach a debugger and step in
【在 b********e 的大作中提到】 : what will happen if free an object in stack? : I did a test : A. : Class A{ : public: : ~A(){cout << "Destructor" << endl:} : } : int test() : { : A a;
|
b********e 发帖数: 693 | 6 for my understand
A a is at stack
but
A * a = new A() is at heap
【在 Q****r 的大作中提到】 : 更正一个,object在heap上 : 不在stack上
|
a****n 发帖数: 1887 | 7 debug version 貌似 CRT LIB 会check 是不是合法的heap指针, assertion failed |
b********e 发帖数: 693 | 8 A a
&a is not valid pointer in heap.
but when only use free(&a), it works,
only problem is I add cout << ""test<< endl; after free
I also tried do this in main function, it works too
wired, don't understand
【在 a****n 的大作中提到】 : debug version 貌似 CRT LIB 会check 是不是合法的heap指针, assertion failed
|
a****n 发帖数: 1887 | 9 这个情况应该是程序调用栈的函数返回地址被毁了, 一般会出现0x00000005
exception. 具体怎么被毁掉的我还不是很清楚, 这个的查看free 函数的算法
另外上面所说的heap valid 函数只在debug version 中有效, release 版本不会做这个检查
再另外,这个应该是编译器实现相关的, 你用的什么编译器, 什么版本?
【在 b********e 的大作中提到】 : A a : &a is not valid pointer in heap. : but when only use free(&a), it works, : only problem is I add cout << ""test<< endl; after free : I also tried do this in main function, it works too : wired, don't understand
|
Q****r 发帖数: 7340 | 10 我觉得reference variable是在stack 上
object本身是在heap上
A a
a 是A的一个reference type...
有没有牛人来解惑以下
【在 b********e 的大作中提到】 : for my understand : A a is at stack : but : A * a = new A() is at heap
|
a****n 发帖数: 1887 | |
w******1 发帖数: 520 | 12 C++的, 通过NEW 生成的, 应该是在HEAP上吧?
A a; 这个在STACK上。 |
l*******o 发帖数: 791 | 13 A a是个automatic variable 或者说个local variable,在定义它的函数栈空间内得到
空间。如果你用free去释放它,我觉得有点张冠李戴。因为free是释放malloc在自由存
储区申请得空间,自由存储区和堆很相似。目标在栈中,free指向自由存储区,两者不
对口。 |