2

次のコードは C++ で記述されていますが、std::vector についてよく知らないため、stdlib.h の realloc を使用しています。

とにかく、この奇妙な実行時エラー " " _CrtIsValidHeapPointer(pUserData), dbgheap.c" が発生します。

メソッドまたはコード全体を見たい場合は、お知らせください。

生徒と学年という 2 つのクラスがあります。学生が含む

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

int _numOfGrades;
int* _grades;
float _avg;

および Grade は単に次を含む

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 に答える