所以我必须在C语言中为学校项目编写类似垃圾收集器的内容。我遇到动态内存分配问题。我的函数growActivePtrs()应该将一个结构的全局数组放大一个,但它似乎不起作用。我已经阅读了很多关于动态分配的材料,并尝试了很多东西,但我无法找到错误。
typedef struct activePtr
{
// pointer to actively used memory
void *memPointer;
// number of times this memory is referenced
int timesUsed;
} activePtr;
activePtr **activePointers;
size_t *ptrCount = 0;
bool growActivePtrs()
{
const size_t totalSize = *ptrCount + 1;
activePtr *temp = (activePtr *)realloc(*activePointers, (totalSize * sizeof(activePtr)));
if (temp == NULL) {
return false;
}
*activePointers = temp;
*ptrCount += 1;
activePointers[*ptrCount - 1]->timesUsed = 0;
activePointers[*ptrCount - 1]->memPointer = NULL;
return true;
}
任何帮助将不胜感激。谢谢。
答案 0 :(得分:4)
ptrCount
这将size_t
定义为指向size_t
的指针,初始化为空指针。除非你为它分配一些实际的*ptrCount
对象的位置(看起来你没有),任何访问size_t
的尝试都注定要失败。
没有理由认为这应该是一个指针。您可以直接存储activePointers
。
正如@ user3121023在评论中正确指出的那样,同样适用于您的{{1}}变量。