程序改错
以下程序段错在哪儿?
char *a(char *c)
{
char b[10];
..........
..........
return b;
}
问题点数:20、回复次数:8Top
1 楼cuibo1123(月满C楼)回复于 2006-03-09 18:26:18 得分 3
...
b是局部变量(在栈区)!
函数结束后,栈内存会被释放! 所以 b就成了一个垃圾地址(因为b[]已经被释放了)~Top
2 楼citywanderer2005(流浪狗)回复于 2006-03-09 18:28:18 得分 3
退出该函数之后,栈内地址被释放,返回的指针指向的内容可能被改变了,如果输出数据的话,还可能引起程序崩溃Top
3 楼wqtl_357(Step By Step!)回复于 2006-03-09 19:06:54 得分 3
返回一个局部变量,离开函数体时它的生命周期结束,所以返回的指针变量指的实际上不存在的东西。
#include <stdio.h>
void main()
{
char* test();
printf("%s\n", test());
}
char* test()
{
char ch[] = "hello";
return ch;
}Top
4 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-09 20:50:03 得分 2
返回栈指针 ....
把空间分配到 堆上去就可以了 ~
char b[10];
改为
char *b = (char *)malloc(10);Top
5 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-09 20:53:09 得分 3
char ch[] = "hello";
指针指向 常量区,
这样的方式可以得到 字符串,
但是意义不大,
因为没有可修改性 ...Top
6 楼Phable(FingerDancer)回复于 2006-03-09 21:11:10 得分 2
看看这儿吧,也许对你有帮助,我也遇到过
http://community.csdn.net/Expert/topic/4317/4317114.xml?temp=.3491938Top
7 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2006-03-09 21:29:16 得分 2
条款31: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用
char *a(char *c)
{
char b[10];
..........
..........
return b;
}
b[]存放在栈上,离开函数就空间就释放了
Top
8 楼zixuan8083(C风破)回复于 2006-03-09 22:03:04 得分 2
char ch[] = "hello"; 分配在栈内存上,局部数组变量;
char *ch = "hello"; "hello"为常量字符串,位于静态存贮区,它返回始终是同一个“只度”的内存块。Top




