Bal*_*cze 2 c++ arrays pointers
我正在学习C++指针,遇到了一个非常奇怪的问题.我们的任务是push_back为我们自己的类编写自己的函数,该类包含一个整数数组.
我有以下简单的功能:
void IntRow::push_back(int value){
int *elements_temp = new int[size+1];
for (int i = 0; i <= size; i++){
elements_temp[i] = elements[i];
}
elements_temp[size + 1] = value;
elements = new int[size+1];
for (int i = 0; i <= size+1; i++){
elements[i] = elements_temp[i];
}
delete [] elements_temp;
size++;
}
Run Code Online (Sandbox Code Playgroud)
然而,这失败了,但仅有一些在线:delete [] elements_temp;
出现以下错误消息:
incorrect checksum for freed object - object was probably modified after being freed.
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,为什么有时会发生这种情况呢?
PS:elements_temp在功能存在之后,我实际上是否必须释放或者是否已释放?
elements_temp[size + 1] = value;当您访问数组边界外的元素时,行为是未定义的.
这种未定义的行为表现为偶尔的程序崩溃.
是的,你需要delete[]在你回来的指针上明确地调用自己new[].(出于兴趣,是谁打来delete[]的elements?)
或者,使用std::vector<int>.