簡體   English   中英

為什么這段代碼給我一個分段錯誤?

[英]Why does this code give me a segmentation fault?

我試圖生成2個矩陣,以后再相乘,但是我的代碼不起作用! 它給我“分段錯誤'核心傾銷'”

這是我的代碼:

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;
}

您需要分配以下矩陣:

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);

因為您永遠不會為ab分配空間。

照原樣, ab不會指向有效內存,當您嘗試寫入它們指向的任何位置時,您顯然正在訪問對程序非法的內存,從而導致分段錯誤。

嘗試這個

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中的代碼混合在一起,會使代碼看起來難看。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM