Я пытаюсь выделить 2d массив в C-программе. Он работает нормально в основной функции, как это (как объяснено здесь ):
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv)
{
int ** grid;
int i, nrows=10, ncols=10;
grid = malloc( sizeof(int *) * nrows);
if (grid == NULL){
printf("ERROR: out of memory\n");
return 1;
}
for (i=0;i<nrows;i++){
grid[i] = malloc( sizeof(int) * ncols);
if (grid[i] == NULL){
printf("ERROR: out of memory\n");
return 1;
}
}
printf("Allocated!\n");
grid[5][6] = 15;
printf("%d\n", grid[5][6]);
return 0;
}
Но так как мне приходилось делать это несколько раз с разными массивами, я пытался переместить код в отдельную функцию.
#include <stdio.h>
#include <stdlib.h>
int malloc2d(int ** grid, int nrows, int ncols){
int i;
grid = malloc( sizeof(int *) * nrows);
if (grid == NULL){
printf("ERROR: out of memory\n");
return 1;
}
for (i=0;i<nrows;i++){
grid[i] = malloc( sizeof(int) * ncols);
if (grid[i] == NULL){
printf("ERROR: out of memory\n");
return 1;
}
}
printf("Allocated!\n");
return 0;
}
int main(int argc, char ** argv)
{
int ** grid;
malloc2d(grid, 10, 10);
grid[5][6] = 15;
printf("%d\n", grid[5][6]);
return 0;
}
Однако, несмотря на то, что при распределении он не жаловался, я получаю ошибку сегментации при доступе к массиву. Я читаю разные посты на разложившихся массивах и похожих темах, но до сих пор не могу понять, как решить эту проблему. Я полагаю, что неправильно передаю 2d массив функции.
Большое спасибо.