2013-05-31 2 views
1

Я пытался динамически создавать многомерный массив в C, но получаю ошибку сегментации!Ошибка сегментации: динамическое распределение памяти для многомерного массива в C

int **arr=malloc(sizeof(int*) *row); 
printf("&ar:r%d arr:%d %d\n\n",*arr,arr,arr[0]); 
for(i=0;i<row;i++){ 
    *(arr+i)=malloc(sizeof(int)*col); 
    printf("row: %d",arr[i]); 
} 
printf("\nbase arr: %d",&arr[0][0]); 

Я проверил адрес строки и выделенной памяти, как требуется для всех элементов в столбце. Но все же, когда я обращаюсь к нему arr[i][j], он показывает другой адрес [Вот почему сиггев].

for(i=0;i<row;i++){ 
    for(j=0;j<col;j++){ 
     arr[i][j]=0; //this point 
    } 
    puts("done"); 
} 

AFAIK, somearr и &somearr же для 1 одномерного массива. Здесь он дает arr [0] и * arr адрес строки 0. но что такое arr? почему это другое?

[Я проверил другие связанные вопросы в Stack Overflow, но у меня нет этих проблем и не может решить эту до сих пор.]

Любые ссылки или ссылки на изучение концепции будет большим.

+0

Где именно вы получаете segfault? Можете ли вы опубликовать вывод консоли из этого кода? –

ответ

3
*(arr+row)=malloc(sizeof(int)*col); 
printf("row: %d",arr[row]); 

Попытка доступа *(arr+row) внутри для цикла является причиной вашего Segfault. Допустимые индексы: от 0 до row-1. Я предполагаю, что вы хотели использовать i, а не row.

*(arr+i)=malloc(sizeof(int)*col); 
printf("row: %d",arr[i]); 
+0

Что такое arr? как он отличается от & arr [0] [0] или arr [0]? – Dineshkumar