使用gcc编译时,我得到错误消息"分段故障(堆芯倾倒(";但我找不到访问超出限制内存的点。我甚至试图只填充矩阵的一部分,但和往常一样,在我成功地从文件中读取所有值后,我得到了相同的错误消息。读取最后一个元素后触发错误
#include <stdio.h>
#include <stdlib.h>
#define NR 4
#define NC 8
#define FILENAME "../debug.log"
int ndominanti(int [][NC], int);
int main(int argc, char * argv[]){
int info[NR][NC];
FILE * pf;
int i, j, ris;
if(pf = fopen(FILENAME, "r")){
for(i = 0; i < NR; i++)
for(j = 0; j < NC; j++)
fscanf(pf, "%d", &info[i][j]);
/* this is where the error occurs */
fclose(pf);
ris = ndominanti(info, NR);
printf("ris: %dn", ris);
}else
printf("Errore apertura file %sn", FILENAME);
return 0;
}
int ndominanti(int info[][NC], int nrighe){
int i, j, k, h;
int curr, ndom, nrighedim, ncoldim;
int isdom;
nrighedim = nrighe - 1;
ncoldim = NC - 1;
ndom = 0;
for(i = 0; i < nrighedim; i++)
for(j = 0; i < ncoldim; j++){
curr = info[i][j];
isdom = 1;
for(k = i + 1; k < nrighe && isdom; k++)
for(h = j + 1; h < NC && isdom; h++)
if(curr <= info[k][h])
isdom = 0;
if(isdom)
ndom++;
}
return ndom;
}
这是文件debug.log的内容,每行用CRLF分隔,而单个元素用单个空格分隔,末尾有一个CRLF
5 9 2 4 1 7 2 4
3 5 6 2 5 6 1 2
1 3 4 7 8 8 3 0
1 3 5 6 7 8 2 1
我很抱歉,但我无法解决这个问题,不管怎么说,它让我发疯了,我只接受了这个
for(j = 0; i < ncoldim; j++) -> for(j = 0; j < ncoldim; j++)
谢谢@kaylum
我没有检查函数,因为我认为问题在main内部,因为在代码中标记的点之后(在调用函数之前(我无法执行任何命令