Во-первых, это может звучать нормально, если я освобожу выделение внутри функции, но это не так. Поскольку я пишу эти строки, я нашел работу вокруг, но я хотел бы сохранить определенную однородность в моем коде и предпочел бы сохранить ее так, как она есть, но вы знаете, что работаете правильно, так что есть еще одно решение или Мое обходное решение - единственный вариант?C: двойной указатель передается как параметры возвращается
Основная функция:
void main(void)
{
SHead head; // Custom struct
unsigned char **array = NULL; // pointer to 2D array
allocArray2D(&head, array) // the function signature: (SHead*, unsigned char**)
// here, the array pointer is still NULL (0x0)
//...
return EXIT_SUCCESS;
}
Распределение функции таНос очень небольшой объем памяти около 21 беззнаковое символ * и для каждого простого указателя 21 беззнаковых символов. Внутри функции указатель в порядке и указывает на правильный адрес.
Так что моя работа была вокруг изменить функцию от:
void allocArray(SHead* h, unsigned char** arr)
{
int x, y, i;
getsize(head, *x, *y);
arr = (unsigned char**)malloc(sizeof(unsigned char*)*y);
if(arr)
printf(">> Erro allocating memory\n"), return;
for(i =0; i<y; i++)
{
arr[i] = (unsigned char)malloc(sizeof(unsigned char)*x);
}
}
к следующему:
unsigned char** allocArray(SHead*)
{
int x, y, i;
unsigned char **arr;
getsize(head, *x, *y);
arr = (unsigned char**)malloc(sizeof(unsigned char*)*y);
if(arr)
printf(">> Erro allocating memory\n"), return;
for(i =0; i<y; i++)
{
arr[i] = (unsigned char)malloc(sizeof(unsigned char)*x);
}
return arr; // returning the address
}
Как я уже говорил ранее, я хотел бы сохранить гомогенность в моем коде и предпочел бы чтобы сохранить подпись функции, аналогичную другой функции. Мое обходное решение работает правильно. И мне интересно, является ли это единственным решением, или, может быть, я что-то упускаю.
EDIT: После комментариев я добавил еще код.
Спасибо, Alex.
не должно быть 'allocArray2D (& head, array);' или это опечатка? –
Пожалуйста, покажите функцию 'allocArray2D'. –
Обеспечьте [mcve]. '* head' выглядит очень неправильно. – Olaf