Realloc似乎没有放大阵列

时间:2018-04-14 21:17:48

标签: c realloc

所以我必须在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;
}

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:4)

ptrCount

这将size_t定义为指向size_t的指针,初始化为空指针。除非你为它分配一些实际的*ptrCount对象的位置(看起来你没有),任何访问size_t的尝试都注定要失败。

没有理由认为这应该是一个指针。您可以直接存储activePointers

正如@ user3121023在评论中正确指出的那样,同样适用于您的{{1}}变量。