gpt4 book ai didi

c - 段错误 : 11 with large array

转载 作者:行者123 更新时间:2023-12-01 13:47:51 24 4
gpt4 key购买 nike

<分区>

一个简单的程序可以正常编译,但会出现运行时错误:segmentation fault: 11

int length=10000;
int num=100;
int num1=20;
int datablocklen=400002; //datablocklen=2*num1*length+2

int main(){
double arr[num*length];
double res[num][num];
for(int i=0;i<num;i++){
for(int j=0;j<num;j++){
res[i][j]=0;
}
}
for(int i=0;i<(num*length);i++){
arr[i]=i;
}
int ntile=(int)(num/num1);
double array_task[datablocklen];
for(int i=0;i<ntile;i++){
for(int j=0;j<ntile;j++){
array_task[datablocklen-2]=i*num1*length;
array_task[datablocklen-1]=j*num1*length;
for(int k=0;k<(num1*length);k++){
array_task[k]=arr[i*num1*length+k];
array_task[num1*length+k]=arr[j*num1*length];
}
}
}
return 0;
}

gcc -o test -std=c99 test.c 获取可执行文件。

奇怪的是,如果给length赋一个小值,比如1000,这个错误不会出现。但是当它大于10000时,就会出现segmentation fault。

注意,我始终关注datablocklen 的值以确保datablocklen=2*num1*length+2。因此,如果 lengthnum1 发生变化,我也会更改变量 datablocklen

我在 mac、OS yosemite 下处理 gdb 时仍然有一些问题。所以我没有用gdb调试程序。但是如果我注释内部的 for 循环,由 k 索引的循环,程序执行得很好。我的意思是,没有错误消息。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com