我有一个名为“ visitor”的结构,我想编写一个函数,为指向该结构的指针分配内存...
此代码有效:
visitor *visitorPtr = NULL;
int visitorCounter = 0;
visitorPtr = realloc(visitorPtr, ((visitorCounter++) * sizeof(visitor)));
但是现在我想将此功能添加到功能中
void getMoreSpace(void *ptr, unsigned int counter)
{
counter++;
ptr = realloc(ptr, counter * sizeof(visitor));
if (ptr == NULL)
{
printf("\n Error allocating memory! \n");
return EXIT_FAILURE;
}
}
//Call in MAIN:
getMoreSpace(visitorPtr, visitorCounter);
不幸的是,这似乎不起作用,因为我无法为此指针创建数据并在为该结构创建该错误时收到此错误: 在My-C-Project.exe中的0x0FDAE559(ucrtbased.dll)处引发了异常:0xC0000005:访问冲突写入位置0x00000000。
答案 0 :(得分:1)
visitorPtr
作为值传递给getMoreSpace
函数。因此,对该函数中的ptr
所做的任何更改都不会更新main中的vistorPtr
。
您需要的是按如下方式调用该函数。
void getMoreSpace(void **ptr, unsigned int counter)
{
counter++;
*ptr = realloc(*ptr, counter * sizeof(visitor));
if (*ptr == NULL)
{
printf("\n Error allocating memory! \n");
}
}
然后从main
进行如下调用。
getMoreSpace(&visitorPtr, visitorCounter);
if (visitorPtr)
...do stuff....