Для назначения я должен выделить непрерывный блок памяти для структуры, но сначала я пытаюсь сделать это с помощью двумерного массива целых и посмотреть, правильно ли я понимаю У нас был пример из книги, который создает блок памяти для массива указателей (строк), а затем инициализирует столбцы и указывает на них указатель. Этот пример был:
int **CreateInt2D(size_t rows, size_t cols)
{
int **p, **p1, **end;
p = (int **)SafeMalloc(rows * sizeof(int *));
cols *= sizeof(int);
for (end = p + rows, p1 = p; p1 < end; ++p1)
*p1 = (int *)SafeMalloc(cols);
return(p);
}
void *SafeMalloc(size_t size)
{
void *vp;
if ((vp = malloc(size)) == NULL) {
fputs("Out of mem", stderr);
exit(EXIT_FAILURE);
}
return(vp);
}
Мне в основном нужно делать то, что делает приведенный выше код, за исключением того, чтобы сделать его одним непрерывным блоком памяти. Ограничением является то, что мне разрешено вызывать malloc только один раз, а затем я должен использовать указатель math, чтобы знать, на что инициализировать указатели. Поэтому я подумал, что инициализирую достаточно памяти чем-то вроде:
int *createInt2D(size_t rows, size_t cols)
{
malloc(rows * sizeof(int *) + (row + cols) * sizeof(int));
}
Но это не совсем правильно, так как я думаю, что мне нужно будет ввести void *, возвращенный из malloc, но это сочетание int и int *. Так что я не совсем уверен, что я на правильном пути. Мысли?