我正在尝试生成2个矩阵以便稍后将它们相乘,但我的代码不起作用! 它给了我"分段错误&#core; core dumped'"
这是我的代码:
double *c;
void populate(int size,double *a,double *b)
{
int i,j;
for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
{
*(a+i*size+j)=1+rand()%100;
*(b+i*size+j)=1+rand()%100;
}
}
}
int main(int argc , char *argv[])
{
if(argc!=2)
{
fprintf(stderr,"You must Enter (..M..)for the size of M*M Matrix ,, try again\n");
exit(-1);
}
if (atoi(argv[1]) <= 0) {
fprintf(stderr, "%d must be > 0\n", atoi(argv[1]));
return -1;
}
const int M=atoi(argv[1]); // size M*M
double *a;
double *b;
populate(M,a,b);
return 0;
}
答案 0 :(得分:4)
您需要分配这些矩阵:
double *a = calloc(M * M, sizeof(double));
double *b = calloc(M * M, sizeof(double));
if (a == NULL || b == NULL) {
fprintf(stderr, "Not enough memory for %d x %d matrices\n", M, M);
exit(1);
}
populate(M,a,b);
答案 1 :(得分:3)
因为您永远不会为a
或b
分配空间。
实际上,a
和b
并未指向有效内存,当您尝试写入他们指向的任何位置时,您显然正在访问对您的程序非法的内存,因此导致分段错误。
试试这个
double *a;
double *b;
a = malloc(M * M * sizeof(double));
if (a == NULL)
return -1;
b = malloc(M * M * sizeof(double));
if (b == NULL)
{
free(a);
return -1;
}
populate(M, a, b);
并将声明与c中的代码混合,使代码看起来很难看。