以下代码是用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时。
欢迎任何输入。
答案 0 :(得分:1)
您无法混合分配器 - 如果您使用operator new[]
分配内存,则必须将其与operator delete[]
取消分配。您无法使用free()
,realloc()
或任何其他内存分配器(例如Windows“GlobalFree()
/ LocalFree()
/ HeapFree()
功能。”
realloc()
只能重新分配使用malloc()
函数系列(malloc()
,calloc()
和realloc()
分配的内存区域。尝试realloc
任何其他内存块是未定义的行为 - 在这种情况下,你很幸运,C运行时能够捕获你的错误,但如果你运气不好,你可能会默默地破坏内存,然后在某些情况下崩溃处于“不可能”状态的随机点。