如何更改动态分配矩阵的大小?

问题描述 投票:1回答:1

我在学校有C练习。我必须制作一个动态分配的矩阵,该矩阵填充有随机数,并且其大小由用户选择。然后,程序要求用户重新定义更大的尺寸,新矩阵必须保留旧值并用随机数填充新值。

当我尝试重新定义矩阵的大小时,程序正在阻塞。从第73行开始,我收到分段错误。我不明白为什么:|

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

int nbRand() {
    static int first = 0;

    if(first == 0) {
        srand(time(NULL));
        first = 1;
    }

    return rand()%10;
}

int main(int argc, char *argv[] ){
    int **matrice, **matrice2; // Tableau
    int i, j; // Compteur
    int longueur1, largeur1, longueur2, largeur2; // Taille dynamique tableau
    size_t n;

    printf("Saisissez la taille du tableau.\n");
    printf("Longueur : ");
    scanf("%d", &longueur1);
    printf("Largeur : ");
    scanf("%d", &largeur1);

    matrice = (int**) malloc(longueur1*sizeof(int*));

    for(i = 0; i < longueur1; i++) {
        matrice[i] = (int*) malloc(largeur1*sizeof(int));
    }

    /* Autre manière
    matrice = (int*) malloc(longueur1*largeur1*sizeof(int));
    */

    for(i = 0; i < longueur1; i++) {
        for(j = 0; j < largeur1; j++) {
            matrice[i][j] = nbRand();
        }
    }

    for(i = 0; i < longueur1; i++) {
        for(j = 0; j < largeur1; j++) {
            printf("%d ", matrice[i][j]);
        }
        printf("\n");
    }

    // Agrandir la matrice
    printf("NOUVELLE TAILLE\n");

    do {    
        printf("Longueur : ");
        scanf("%d", &longueur2);
    } while(longueur2 < longueur1);

    do {    
        printf("Largeur : ");
        scanf("%d", &largeur2);
    } while(largeur2 < largeur1);

    matrice2 = (int**) realloc(matrice, longueur2*sizeof(int*));

    for(i = 0; i < longueur2; i++) {
        matrice2[i] = (int*) realloc(matrice[i], largeur2*sizeof(int));
    }

    matrice=matrice2;

    for(i = 0; i < longueur2; i++) {
        for(j = 0; j < largeur2; j++) {
            matrice[i][j] = nbRand();
            printf("%d\t%d\t%d\n", i, j, matrice[i][j]);
        }
    }
    printf("test\n");
    for(i = 0; i < longueur2; i++) {
        for(j = 0; j < largeur2; j++) {
            printf("%d ", matrice[i][j]);
        }
    printf("\n");
    }
}
c arrays matrix size
1个回答
0
投票
matrice2 = (int**) realloc(matrice, longueur2*sizeof(int*));
for(i = 0; i < longueur2; i++) {
    matrice2[i] = (int*) realloc(matrice[i], largeur2*sizeof(int));
                                 ^^^^^^^^^^
                                     |
                                      -> You are accessing old pointer here. 
}

是错误的,应该是

matrice2 = (int**) realloc(matrice, longueur2*sizeof(int*));
for(i = 0; i < longueur2; i++) {
    matrice2[i] =  realloc(matrice2[i], largeur2*sizeof(int));
}
© www.soinside.com 2019 - 2024. All rights reserved.