2015-01-14 3 views
0

Я пытаюсь выделить 2-мерный массив во время выполнения, используя malloc, используя концепцию указателей на указатели. Этот код не показывает ошибки компиляции, но дает ошибку времени выполнения.Создание двумерного массива во время выполнения с использованием malloc

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

int ** alpha(void) 
{ 
    int **x; 

    x=(int **)malloc(3*sizeof(int *)); 

    for(int i=0;i<3;i++) 
    { 
    x[0]=(int *)malloc(3*sizeof(int)); 
    } 
    for(int i=0;i<3;i++) 
    { 
     for(int j=0;j<3;j++) 
     { 
      x[i][j]=i+j; 
     } 
    } 
    return x; 
} 

int main() 
{ 
    int **p; 

    p=alpha(); 

    printf("%d",p[1][2]); 

    return 0; 
} 
+0

Есть разница в C между двумерным массивом и массивом массивов, кстати. Это последнее. – Leushenko

+0

И ошибка времени выполнения ...? – AndersNS

ответ

1

Причина ошибки во время выполнения происходит потому, что вы выделяете память только для x[0] .so, изменить

x[0]=(int *)malloc(3*sizeof(int)); 

в

x[i]=malloc(3*sizeof(int)); 

и don't cast the result of malloc.

0

В

x[0]=(int *)malloc(3*sizeof(int)); 

вы в конечном итоге распределение памяти только для индекса 0 три раза. использование i.

После того, как вы закончите использовать, не забудьте указать free() выделенную память. В противном случае это приведет к утечке памяти .

Кроме того, нет необходимости выдавать возвращаемое значение malloc()/calloc().

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