未正确声明数组检测到堆栈粉碎错误
Stack smashing error detected by not declaring array properly
我无法解决这个错误,请在我错的地方帮助我,也请告诉我如何使用 GNU 调试器,因为当我使用它时,“1.c 不是一个可执行文件”错误发生。
这是我的代码的 ADT 文件:- Sparse.c
这是我的代码:-
char filename[4];
int i,j,vectorCount=0;
refFile=fopen("x3.txt","r");
for(i=0; i<=100; i++){
fscanf(refFile,"%f",&x[i].value);
x[i].row=i;
x[i].col=1;
}
for(i=1; i<=10; i++){
sprintf(filename,"data/y%d.txt",i);
FILE *fptr=fopen(filename,"r");
y=newSparse(100,1,0);
for(j=0; j<100; j++){
fscanf(fptr,"%f",&y[j].value);
y[j].row=j+1;
y[j].col=1;
}
if(classCheck(x, y)==1){
vectorCount++;
}
}
您声明
char filename[4];
所以 filename
可以包含最多 3 个字符长的文件名(4-1,因为 NUL 终止符)。
后来你有这个:
sprintf(filename,"data/y%d.txt",i);
和"data/y%d.txt"
明显长于3个字符
所以声明 char filename[100];
应该可以完成工作。
我无法解决这个错误,请在我错的地方帮助我,也请告诉我如何使用 GNU 调试器,因为当我使用它时,“1.c 不是一个可执行文件”错误发生。
这是我的代码的 ADT 文件:- Sparse.c
这是我的代码:-
char filename[4];
int i,j,vectorCount=0;
refFile=fopen("x3.txt","r");
for(i=0; i<=100; i++){
fscanf(refFile,"%f",&x[i].value);
x[i].row=i;
x[i].col=1;
}
for(i=1; i<=10; i++){
sprintf(filename,"data/y%d.txt",i);
FILE *fptr=fopen(filename,"r");
y=newSparse(100,1,0);
for(j=0; j<100; j++){
fscanf(fptr,"%f",&y[j].value);
y[j].row=j+1;
y[j].col=1;
}
if(classCheck(x, y)==1){
vectorCount++;
}
}
您声明
char filename[4];
所以 filename
可以包含最多 3 个字符长的文件名(4-1,因为 NUL 终止符)。
后来你有这个:
sprintf(filename,"data/y%d.txt",i);
和"data/y%d.txt"
明显长于3个字符
所以声明 char filename[100];
应该可以完成工作。