C 分段故障-原因未知
尽管这两个文件各自有2^14个值,但我还是发现这段代码有分段错误。谁能告诉我原因吗C 分段故障-原因未知,c,segmentation-fault,C,Segmentation Fault,尽管这两个文件各自有2^14个值,但我还是发现这段代码有分段错误。谁能告诉我原因吗 #define N 128 #include<stdio.h> #include <malloc.h> int A[N][N]; int B[N][N]; int C[N][N]; void mmul(); int main() { int p,q; FILE *fp; fp=fopen("A.txt","r"); if(fp=NULL)
#define N 128
#include<stdio.h>
#include <malloc.h>
int A[N][N];
int B[N][N];
int C[N][N];
void mmul();
int main()
{
int p,q;
FILE *fp;
fp=fopen("A.txt","r");
if(fp=NULL)
printf("Error\n");
printf("A");
for(p=0;p<(1<<7);p++)
{
for(q=0;q<(1<<7);q++)
{
fscanf(fp, "%d", &A[p][q]);
}
}
fclose(fp);
fp=fopen("B.txt","r");
if(fp=NULL)
printf("Error\n");
for(p=0;p<(1<<7);p++)
{
for(q=0;q<(1<<7);q++)
{
fscanf(fp, "%d", &B[p][q]);
}
}
fclose(fp);
printf("here");
mmul();
}
void mmul()
{
int i,j,k;
unsigned int sum;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
sum=0;
for(k=0;k<N;k++)
{
sum=sum+(A[i][k]*B[k][j]);
}
C[i][j]=sum;
}
}
}
它是整个身体。因此,如果没有文件,您将得到一个空fp,打印错误并使用空fp继续执行。它会导致分割错误。
此外,它是一个赋值,而不是一个比较,因此您总是得到NULL fp,而不是打印错误
您需要添加退出语句:
if (fp == NULL) {
fprintf(stderr, "Error: failed to open file\n");
return -1;
}
它是整个身体。因此,如果没有文件,您将得到一个空fp,打印错误并使用空fp继续执行。它会导致分割错误。
此外,它是一个赋值,而不是一个比较,因此您总是得到NULL fp,而不是打印错误
您需要添加退出语句:
if (fp == NULL) {
fprintf(stderr, "Error: failed to open file\n");
return -1;
}
带警告编译
if (fp = NULL)
带警告编译
if (fp = NULL)
但是文件在那里。那问题出在哪里哦是的…明白了!!我没有仔细看,但文件在那里。那问题出在哪里哦是的…明白了!!如果您在平台调试器gdb下运行此程序,则可能会立即告诉您seg错误的原因,从这段代码来看,seg错误可能是引用原始指针的唯一原因:文件*fp和您的赋值,而不是评估检查,1我刚才偷看了3个标记为相关的随机问题,并在所有这些问题中找到了使用调试器或运行valgrind的建议。这清楚地表明您没有这么多。如果您在平台调试器gdb下运行此操作,您可能会立即被告知导致seg故障的原因,这段代码可能是引用原始指针的唯一原因:文件*fp和您的赋值,而不是评估检查,1我刚才偷看了3个标记为相关的随机问题,并在所有这些问题中找到了使用调试器或运行valgrind的建议。这清楚地表明你没有那么多。