【发布时间】:2021-08-04 16:10:59
【问题描述】:
当使用动态分配的二维数组时,我得到一个segmentation fault (core dumped)。我的代码如下:
#define TMILKY 1e4
#define TABLE_SIZE 10000
struct func_params{
double *(pop)[3];
};
我想分配一个由 TABLE_SIZE 行和 3 列组成的二维数组。
int main(int argc, char **argv){
struct func_params params;
double t=0;
int i=0;
params.pop[3] = malloc(sizeof(*params.pop[0]) * TABLE_SIZE);
if (params.pop == NULL) printf("population: allocation failed");
while (t<TMILKY){
params.pop[0][i]=0;
params.pop[1][i]=2;
params.population[2][i]=0;
printf("i %d t %e P %e B %e \n",i,t,params.population[0][i],params.population[1][i]);
t = t+100;
i++;
}
free(params.population[3]); /* deallocate the buffer */
return(0);
}
有人可以帮忙找出我的错误吗...?
【问题讨论】:
-
您的
struct func_params没有任何名为pop的成员。请发帖Minimal, Reproducible Example。 -
@KamilCuk
1e4整数是10000,而不是1000。 -
params.pop[3]超出范围,因此您不能在那里分配任何内容。 -
@KamilCuk 将
malloc()用于大型数组是避免堆栈溢出的好策略,即使大小不变。 -
然后在你的代码中使用
10000。不是浮点值,例如1e4。1e4等浮点值的精度有限。您可以将1e7放入您的代码中,期望得到10000000作为值,但实际上得到9999932。发生这种情况的确切点和您获得的确切值无关紧要 - 使用浮点值来定义数组的大小基本上是错误。
标签: c segmentation-fault malloc