gpt4 book ai didi

c++ - 使用 realloc : "_CrtIsValidHeapPointer(pUserData), dbgheap.c" 时出现运行时错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:28:11 25 4
gpt4 key购买 nike

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

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

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

我有 2 个类(class),Student 和 Grades。学生包含

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 时出现。

欢迎任何输入。

最佳答案

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

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

关于c++ - 使用 realloc : "_CrtIsValidHeapPointer(pUserData), dbgheap.c" 时出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15915109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com