realloc 似乎没有扩大阵列
Realloc doesn't seem to enlarge array
所以我必须用 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;
}
任何帮助将不胜感激。谢谢。
size_t *ptrCount = 0;
这将 ptrCount
定义为指向 size_t
的指针,初始化为空指针。除非您为它分配某个实际 size_t
对象的位置(看起来您没有),否则任何访问 *ptrCount
的尝试都注定要失败。
没有理由认为这应该是一个指针。你可以直接存储一个size_t
。
正如@user3121023 在评论中正确指出的那样,这同样适用于您的 activePointers
变量。
所以我必须用 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;
}
任何帮助将不胜感激。谢谢。
size_t *ptrCount = 0;
这将 ptrCount
定义为指向 size_t
的指针,初始化为空指针。除非您为它分配某个实际 size_t
对象的位置(看起来您没有),否则任何访问 *ptrCount
的尝试都注定要失败。
没有理由认为这应该是一个指针。你可以直接存储一个size_t
。
正如@user3121023 在评论中正确指出的那样,这同样适用于您的 activePointers
变量。