【发布时间】:2019-04-03 12:12:40
【问题描述】:
我有一个名为“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。
【问题讨论】:
-
您了解以下概念:按值调用和按引用调用吗?
-
您修改的是 local 变量,而不是调用者的变量。所以调用者看不到变化。按照 Sourav Gosh 的建议查找按值调用和按引用调用。
-
对我来说,如果在函数之后 var 仍处于更改状态,则按引用调用意味着
-
call-by-reference 对我来说意味着如果在函数之后 var 仍处于更改状态 以及 C 如何传递变量...
-
通常总是按值,如果您使用指针,则按引用! :-)