У меня странная проблема с указателем, которую я никак не могу понять. В одной функции (в данном случае main
) я хочу объявить указатель **arr
, который в конечном итоге должен стать 2D-массивом. Затем я хочу передать этот указатель в функцию (fillArray
), где я хочу сгенерировать двумерный массив с dyn2Darray
, а затем заполнить этот массив некоторыми данными. Затем обратно в main
Я хочу что-то сделать с данными. К сожалению, это приводит к дампу ядра. Может быть, какой-нибудь мудрый C -Мастер скажет мне, что я делаю не так с моими указателями. Кроме того, размеры массива (r
и c
) определены в fillArray
в реальной задаче, поэтому смещение определений не поможет мне. Я почти уверен, что должен быть способ сделать это, поскольку все возможно с C.
#include<stdio.h>
#include<stdlib.h>
int **dyn2Darray(int I, int J)
{
int **arr = malloc(sizeof(int *) * I + sizeof(int) * I * J);
int *ptr = (int *)(arr + I);
for (int i = 0; i < I; ++i) {
arr[i] = (ptr + J * i);
}
return arr;
}
void fillArray(int ***arr, int r, int c)
{
int count = 0,i,j;
*arr = dyn2Darray(r, c);
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
*arr[i][j] = ++count;
}
int main()
{
int r=3, c=4;
int **arr = NULL;
int i,j;
fillArray(&arr, r, c);
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
printf("%d ", arr[i][j]);
return 0;
}
РЕДАКТИРОВАТЬ: Решение было найдено путем отладки с Visual Studio. Мой вопрос теперь изменился: как я могу отладить это с gdb
?