使用realloc时出现运行时错误:“_ CrtIsValidHeapPointer(pUserData),dbgheap.c”

时间:2013-04-10 00:49:51

标签: c++

以下代码是用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时。

欢迎任何输入。

1 个答案:

答案 0 :(得分:1)

您无法混合分配器 - 如果您使用operator new[]分配内存,则必须将其与operator delete[]取消分配。您无法使用free()realloc()或任何其他内存分配器(例如Windows“GlobalFree() / LocalFree() / HeapFree()功能。”

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