簡體   English   中英

C-創建“ 2D數組”時出現分段錯誤

[英]C - Segmentation fault on creating “2D Array”

我必須創建一個帶有x行的“ 2D數組”(用戶可以決定多少行),並且對於每一行,應該有隨機數量的列,這些列將是隨機生成的,因此它看起來像這樣:

2 - 4 - 6

1 - 2 - 8 - 9 - 2 - 3

1 - 2

每行的列數將以size [i]保存。 2d數組中的數字將隨機生成。 我在這里通過stackoverflow查看了一下,找到了一些有關動態內存分配的解決方案,但是無論如何,我總是以“段錯誤”告終,而我並沒有真正看到代碼中的主要缺陷。 因此,將尋求任何幫助。 :)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int** create_array(int* sizes, int rows){
    int** array;
    array=(int**) malloc(rows*sizeof(int*));
    for(int i=0;i<rows;i++){
        array[i]=(int*) malloc((sizes[i])*sizeof(int));
    }
    for(int i=0;i<rows;i++){
        for(int j=0;j<sizes[i];j++){
            array[i][j]=(((double) rand() / (RAND_MAX))*20);
        }
    }
    return array;
}

void print_array(int** array, int* sizes){
    int rows=sizeof(sizes)/sizeof(sizes[0]);
    for(int i=0;i<rows;i++){
        for(int j=0;j<sizes[i];j++){
            printf("%d ",array[i][j]);
        }
        printf("\n");
    }
}

int main(int argc, char const *argv[])
{
    int rows = 0;
    srand(time(NULL));
    printf("Wie viele Zeilen möchten Sie erzeugen?");
    scanf("%d",&rows);
    int sizes[rows];
    for(int i=0;i<rows;i++){
        sizes[i]=(((double) rand() / (RAND_MAX))*9+1);
        printf(" %d ",sizes[i]);
    }
    int** arr;
    arr=create_array(sizes,rows);
    print_array(arr,sizes);
    return 0;
}

你有一個錯誤

for(int j=0;i<sizes[i];j++)

它應該是

for(int j=0;j<sizes[i];j++)

如果您使用更多的空白,例如

for (int j = 0 ; i < sizes[i] ; j++)
/*               ^ see, here it's very clear now

而且,使用完數據后,別忘了free撥打電話。

也更改此功能

void print_array(int** array, int* sizes){
    int rows =sizeof(sizes)/sizeof(sizes[0]);
    for(int i=0;i<rows;i++){
        for(int j=0;i<sizes[i];j++){
            printf("%d ",array[i][j]);
        }
        printf("\n");
    }
}

無法確定sizes元素的sizes ,必須將其作為參數傳遞

void print_array(int** array, int* sizes, int rows)
{
    for(int i=0;i<rows;i++){
        for(int j=0;i<sizes[i];j++){
            printf("%d ",array[i][j]);
        }
        printf("\n");
    }
}

注意 :無需在c中malloc ,它可以隱藏錯誤。

暫無
暫無

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

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