删除数组只会偶尔失败

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在功能存在之后,我实际上是否必须释放或者是否已释放?

Bat*_*eba 5

elements_temp[size + 1] = value;当您访问数组边界外的元素时,行为是未定义的.

这种未定义的行为表现为偶尔的程序崩溃.

是的,你需要delete[]在你回来的指针上明确地调用自己new[].(出于兴趣,是谁打来delete[]elements?)

或者,使用std::vector<int>.

  • 因为元素的索引是从0开始的.你知道C++不是Fortran. (2认同)