Динамические многомерные массивы - PullRequest
1 голос
/ 07 июля 2011

Я перепробовал все, и из того, что я понял, этот код верен, но все равно выдает мою ошибку сегментации. Помощь

#include <stdio.h>
#include<malloc.h>

void da(int ***array, int row, int col){
    int i;
    *array=(int **)malloc(sizeof(int *)*row);
    for (i=0; i<row; i++)
        *array[i]=(int *)malloc(sizeof(int)*col);   
}

main(){
    int **array;
    int i,n,m;
    printf("Input number of rows: ");
    scanf("%d",&n);
    printf("Input number of columns: ");
    scanf("%d",&m);
    da(&array,n,m);
    for (i=0; i<n; i++)
        free(array[i]);
    free(array);
}

Ответы [ 2 ]

6 голосов
/ 07 июля 2011

Оператор [] имеет больший приоритет, чем оператор *. Поставить скобки на: (*array)[i]=(int *)malloc(sizeof(int)*col);

0 голосов
/ 07 июля 2011

Код вроде ОК.Я предполагаю, что один из mallocs дает сбой (возвращает NULL), так как вы не проверяете ответ.Свободный на NULL очевидно терпит неудачу.Это может быть вопросом памяти.Какие числа для строк и столбцов вы используете?

Другие советы.Этот код слишком сложен.Поскольку вы создаете регулярную матрицу, проще и эффективнее создать массив одного измерения.

void da(int **array, int row, int col){
    int i;
    *array=(int *)malloc(sizeof(int)*row*col);
    return; }
...