[c 语言问题] 一次 for 循环后,指针所指内容完全丢失。不知原因是什么?有代码

2015-04-24 11:42:50 +08:00
 thinkIn
int *p;
int max;
p=collect();//p获取正常
max=p[0];
for (int i=0;i<15;i++)
max=(max>p[i+1])?max:p[i+1];
while(max)
{
for (int i=0;i<16;i++)
if(p[i]>=max) //最好不要用p[i]-max>=0,可能溢出
printf(" * ");
else printf(" ");
printf("\n");
max--;
}

第一次for循环后,p指向内容全变了,求教啊
2096 次点击
所在节点    问与答
4 条回复
lifanxi
2015-04-24 11:54:30 +08:00
不知道楼主的程序想干嘛。

就看这段代码,没什么问题。

但是代码里没有给出collect函数的实现,如果collect里的返回一个合理的数组的话,也是没问题的。但是如果collect里返回一个栈上的地址的话,那就呵呵了。
thinkIn
2015-04-24 11:59:00 +08:00
nt *collect(void)
{
int p[16]={0};
********
return p;
}

应该就是一楼说的问题,thanks
ledzep2
2015-04-24 12:00:13 +08:00
楼上说的很对. 很可能是collect返回了一个本地数组, 也就是说是已经被释放掉的数组. 你需要返回一个malloc分别配内存. 然后用完之后手动释放掉.
ilotuo
2015-04-24 12:12:10 +08:00
int p 加个 static
static int p[16];

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/185968

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX