Вы передаете копию указателя memBlock_1
в xalloc
, поэтому адрес, возвращаемый malloc
, записывается в копию и никогда не достигает вызывающей функции. Поскольку вы, вероятно, хотите, чтобы адрес был доступен для xxyz
в memBlock_1
, вы должны передать указатель на указатель на символ в качестве второго аргумента,
void xalloc(..., char **memBlock, ...)
и позвоните по номеру xalloc(..., &memBlock_1, ...);
. В теле xalloc
заменить все вхождения memBlock
на *memblock
, например, (*memblock = malloc(blockSize)) == NULL
(не нужно кастовать).
Аналогично, параметр StreamStruct
в xalloc
никогда не изменяет StreamBuild
указатель на указатель на структуру s_stream в xxyz
. Если я правильно интерпретирую ваши намерения, вам также придется добавить слой указателя к этому параметру, void xalloc(struct s_stream ***StreamStruct, ..., ...)
, передать адрес StreamBuild
в вызове, xalloc(&StreamBuild, ..., ...)
и разыменовать указатель в теле функции, например, (*StreamStruct = malloc(structCount * i)) == NULL
.