以下是两个代码片段。一个正常工作,但另一个失败。
主要功能传递和返回数组(C代码)
int main
{
int *x,*y,n,*c;
//some code
c=myfunc(x,y,n);
//rest code
}
这里是工作的代码:
int * myfunc(int *a, int *b, int n)
{
int *s,i,*t;
for(i=0;i<n;i++)
s[i]=x[i]+y[i];
t=s;
return s;
}
这里是行不通
int * myfunc(int *a, int *b, int n)
{
int s[100],i,*t;
for(i=0;i<n;i++)
s[i]=x[i]+y[i];
t=&s[0];
return t;
}
代码这里发生的是,即使返回的值是正确的地址(测试和检查)内容似乎自己修改。但是,在第一种情况下,情况似乎并非如此。
不仅如此,而且在执行的查询结束时,整个s [100]数组的内容都不相同。这基本上意味着所有这些地址的内容因为一些随机原因而被修改。
- 编辑 -
问题的直截了当方面:
为什么当为s初始化确实s的内容[100]得到恢复,并在那里为s的内容时,作为初始化* s不复位之后的复位。请注意:我没有使用malloc()或与我的代码上任何地方的堆栈有关的函数。
**使用的编译器是Turbo C **。
这个问题并不完全达到我的查询点。 我的疑问是,为什么* s初始化工作,而不是s [100]。其余的代码是简单而相同的。没有使用malloc()函数,没有并发症。 – n0tty 2014-10-28 19:42:17
查看我的其他评论。在这两种情况下,就我们所能看到的(除了'int * s'的隐藏,绝密初始化之外),你有未定义的行为。没有理由期望任一版本特别做任何事情。移动一些代码,重新排序一些函数调用,另一个版本现在可以*出现*工作。任何*都不应该*,因为任何理由。 – 2014-10-28 19:45:36
对不起,最高机密初始化大声笑...我认为这只是一个垃圾代码,因为没有什么特别的。在问题中添加了整个功能。谢谢 – n0tty 2014-10-28 19:55:52