首先请大家看下面的例子能不能正常输出'e'.
#include<stdio.h>
void test(char**p)
{
char a = 'e';
*p = &a;
}
int main(void)
{
char* p;
test(&p);
printf("%c", *p);
return 0;
}
问题:char a = 'a';应该存放在栈内存上,这块内存应该随着test()函数的结束而释放 , 也就是说&a所指向的那块内存应该被释放了,不再是'a'了,而是垃圾数据。
可事实上,在VS2010上, 以上例子却可以正常运行。
非常费解,查阅有关资料,只说与编译器有关系。还请有关达人细说一下,感激不尽!
请问是哪一本书告诉你'e'分配在栈上面了??
告诉我,顺便把那本书扔掉,越早越好.
'e'分配在数据段,a分配在栈上面.a的内容是'e'.
你的指针p在test里面指向了一个临时变量,这样是不合法的.
标准C里面,访问已经被释放的变量,行为是未定义的.
没说'e'在栈上!
"你的指针p在test里面指向了一个临时变量,这样是不合法的.
标准C里面,访问已经被释放的变量,行为是未定义的." 这才是我想问的,a在栈上,p指向a, a被释放, 但a的内容还能被通过P访问并打印出来了 。
@影一辉:
能打印出来也属于未定义行为的一种,未定义的意思就是,只有上帝知道那玩意儿出来到底是什么.
@egmkang: 上帝说:“你该结贴了!”, 于是我结贴了。。。