这段代码返回局部变量的指针为什么能行?解决方法
这段代码返回局部变量的指针为什么能行?
在vs2010中,能正常打印出来..
------解决方案--------------------
巧合。
------解决方案--------------------
可能内核没来得及清理,就被打出来了
------解决方案--------------------
因为是常量字符串,其地址是固定的
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
运气好而已。。
------解决方案--------------------
分析下这段代码,绝对跟常量指针不搭架,首先先是声明了个数组,然后对数组进行赋值。
紧接着将这个数组的头指针传出来,因为是临时变量,所以很有可能在得到这个指针后,系统把栈给释放掉。
然后你就会得到莫名其妙的东西。。。
------解决方案--------------------
我取消我的发言....现在我也不是很清楚...尴尬
------解决方案--------------------
------解决方案--------------------
str=returnStr();
printf("%s\n", str);
如果这2句 永远连着用 那肯定正常,不是巧合
局部变量的申请和回收 也只是一个指针上移下移操作而已,只要原来的局部变量没有被破坏,那么他当然会保持原来的样子, 因为什么时候会被破坏我们不知道,是有编译器决定的,所以我们通常说他的内容已经失效,使用的话有可能导致未知的错误
------解决方案--------------------
这位说得对啊!
连着用就没有问题
------解决方案--------------------
不同的编译器,不同的编译选项,对堆栈中的内容有不同影响,所以说是巧合。
楼主可以试试不同的编译器和不同的编译选项。
------解决方案--------------------
运气好而已
不要纠结于这种问题
------解决方案--------------------
学习!
------解决方案--------------------
编译器有时候出的问题,真叫人纠结
------解决方案--------------------
菜鸟时写过这种bug代码
------解决方案--------------------
这种代码很考验人品啊!
- C/C++ code
char *returnStr() { char p[]="hello world!"; return p; } int _tmain() { char *str; str=returnStr(); printf("%s\n", str); return 0; }
在vs2010中,能正常打印出来..
------解决方案--------------------
巧合。
------解决方案--------------------
可能内核没来得及清理,就被打出来了
------解决方案--------------------
因为是常量字符串,其地址是固定的
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
运气好而已。。
------解决方案--------------------
分析下这段代码,绝对跟常量指针不搭架,首先先是声明了个数组,然后对数组进行赋值。
紧接着将这个数组的头指针传出来,因为是临时变量,所以很有可能在得到这个指针后,系统把栈给释放掉。
然后你就会得到莫名其妙的东西。。。
------解决方案--------------------
我取消我的发言....现在我也不是很清楚...尴尬
------解决方案--------------------
------解决方案--------------------
str=returnStr();
printf("%s\n", str);
如果这2句 永远连着用 那肯定正常,不是巧合
局部变量的申请和回收 也只是一个指针上移下移操作而已,只要原来的局部变量没有被破坏,那么他当然会保持原来的样子, 因为什么时候会被破坏我们不知道,是有编译器决定的,所以我们通常说他的内容已经失效,使用的话有可能导致未知的错误
------解决方案--------------------
这位说得对啊!
连着用就没有问题
------解决方案--------------------
不同的编译器,不同的编译选项,对堆栈中的内容有不同影响,所以说是巧合。
楼主可以试试不同的编译器和不同的编译选项。
------解决方案--------------------
运气好而已
不要纠结于这种问题
------解决方案--------------------
学习!
------解决方案--------------------
编译器有时候出的问题,真叫人纠结
------解决方案--------------------
菜鸟时写过这种bug代码
------解决方案--------------------
这种代码很考验人品啊!