为什么这个代码不起作用,什么是解决方案?
在代码中我提到的函数中,我试图将该函数生成的所有值分配给一个数组,用 int o 创建一个更简单的循环形式。 (因为从数组的开始分配开始,可以使用上面的循环中的非循环)
程序崩溃。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
int s;
int o;
int n;
n=20;
long int arr[n];
long int arr2[n];
for(i=0; i<n; i++){
arr[i]=(i+1)*6;
}
//this function seems to do problems
o=0;
for(i=0; i<n-1; i++){
for(s=1; s<n-i-1; s++){
arr2[o]=arr[i+s]-arr[i]; o++;
}
}
return 0;
}
答案 0 :(得分:3)
由于这条线而崩溃:
arr2[o]=arr[i+s]-arr[i]; o++;
特别是o++
部分。你在一个嵌套循环中调用它,所以o++
将被调用超过n
次,从而溢出为它分配的缓冲区。
o
达到171 - 因此您需要使arr2
足够大,或者(更有可能)将o++
移动到外循环。