gpt4 book ai didi

c - 分段故障(故障核心转储)

转载 作者:行者123 更新时间:2023-11-30 17:01:10 25 4
gpt4 key购买 nike

我有这段代码,它是一个在二维数组中执行渗滤模拟步骤的函数。

int step (double ** mat, unsigned n, unsigned m, double a, double b)
{
int i, h, r, c, steps, x, y, o, v; // search for minimum
int min;
FILE *fp;

for(steps=0; steps<2; steps++) // percolation steps
{
for (o=0; o<n; o++)
{
for(v=0; v<m; v++)
{
if (mat[o][v]==-2) {mat[o][v]=-1;}
}
} //trasformo i -2 in -1

min=b; //set the minimum to max of range
for(x=0; x<n; x++) // i search in the matrix the invaded boxes
{
for(y=0; y<m; y++)
{
if (mat[x][y]=-1) //control for the boxes
{
if (mat[x][y-1]<=min && mat[x][y-1]>=0) {min=mat[x][y-1]; r=x; c=y-1;} //look for the minimum adjacent left and right
if (mat[x][y+1]<=min && mat[x][y+1]>=0) {min=mat[x][y+1]; r=x; c=y+1;}
for (i=-1; i<=1; i++) //look for the minimum adjacent up and down
{
for(h=-1; h<=1; h++)
{
if (mat[(x)+i][(y)+h]<=min && mat[(x)+i][(y)+h]>=0)
{
min=mat[(x)+i][(y)+h];
r=(x)+i; c=(y)+h;
}
}
}
}
}
}
mat[r][c]=-2;

x=r; y=c;
}
return 0;
}

当我在 main 函数中使用它时,我获得Segmentation-fault(已创建核心转储)。您知道错误出在哪里吗?

最佳答案

当您尝试访问未分配给程序的内存地址时,会生成段错误 (SF)。您的代码中有一些错误

 if (mat[x][y+1]<=min && mat[x][y+1]>=0)

这里,当y==m-1时,索引就会超出范围。这也适用于循环内的其他一些数组索引

if (mat[x][y]=-1) 

这里有一个输入错误,相等比较运算符应该是 ==

很难判断代码的哪一部分负责 SF。它将为您节省大量时间来使用调试器并在运行时捕获错误。然后您可以查看堆栈跟踪并了解发生了什么。

关于c - 分段故障(故障核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37211258/

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