2015-10-26 6 views
0

Я последовал за несколькими примерами на этом форуме, но, похоже, моя программа все еще продолжает сбой в какой-то момент.Распределение памяти. 2D-массив (функция Void)

Все, что я хочу сделать, это просто использовать void function для распределения памяти.

void alloc(int ***matrix, int n) 
{ 
    int i = 0; 
    for(; i < n; i++) 
    { 
     (*matrix)[i] = (int*)malloc(n * sizeof(int)); 
    } 

    i = 0; 
    for(; i < n; i++) 
    { 
     int j = 0; 
     for(; j < n; j++) 
     { 
      (*matrix)[i][j] = i * j; 
     } 
    } 
} 

//------------------------------------------------------------------- 
int main() 
{ 
    int n; 
    int **matrix_pp; 

    printf("Enter n: "); 
    scanf("%d", &n); 

    alloc(&matrix_pp, n); 

    free(matrix_pp); 
    return 0; 
} 
+3

Нет двухмерного массива! И быть 3-звездочным программистом - это не комплимент. Поскольку ваша функция 'void' в любом случае, вы должны просто вернуть указатель. – Olaf

ответ

3

Вы пытаетесь использовать (*matrix)[i], прежде чем оно будет выделено. Add:

(*matrix) = malloc(n * sizeof(**matrix)); 

до вашего for петля.

Примечание две вещи здесь:

1) Не отлитые результат malloc,

2) использовать sizeof(*pointer) вместо явного выписывания типа; таким образом, если вы решите изменить тип позже, он все равно будет работать.

Кроме того, вам необходимо будет free все распределения, которые у вас есть в цикле, как цикл; в противном случае у вас есть утечка памяти.

+0

Спасибо, он все отлично сейчас – beingas

 Смежные вопросы

  • Нет связанных вопросов^_^