2

以下代码是用 C++ 编写的,但使用了 stdlib.h 中的 realloc,因为我对 std::vector 了解不多。

无论如何,我得到了这个奇怪的运行时错误“”_CrtIsValidHeapPointer(pUserData),dbgheap.c”。

如果您想查看整个方法或代码,请告诉我。

我有 2 个班级,学生和年级。学生包含

char _name[21];         
char _id[6];             

int _numOfGrades;
int* _grades;
float _avg;

和等级简单地包含

Student* _students;
int _numOfStudents;

而以下工作

_grades = (int *)realloc(_grades,(sizeof(int)*(_numOfGrades+1)));

这将产生奇怪的运行时错误:

_students = (Student *)realloc(_students,(sizeof(Student)*(_numOfStudents+1)));

_grades 和 _students 都是用 new 创建的,完全没有问题。问题仅在于尝试重新分配_students。

欢迎任何意见。

4

1 回答 1

1

你不能混合分配器——如果你用 分配内存operator new[],你必须用 释放它operator delete[]。您不能使用free(),realloc()或任何其他内存分配器(例如 Windows 的GlobalFree()//函数)LocalFree()HeapFree()

realloc()只能重新分配使用malloc()函数族(malloc()、、calloc()realloc())分配的内存区域。尝试realloc任何其他内存块都是未定义的行为——在这种情况下,你很幸运,C 运行时能够捕捉到你的错误,但如果你不走运,你可能会默默地破坏内存,然后在某个随机点崩溃“不可能”的状态。

于 2013-04-10T00:56:49.960 回答