在C ++中调用数组时删除操作员行为?

时间:2018-05-24 11:58:43

标签: c++ visual-c++

我有以下代码行。

代码示例1

df3 = df1.merge(df2,on='Code',how='left')

代码示例2

<TablePagination 
    colSpan={2}
    count={2} 
    rowsPerPage={2} 
    classes={{
        root: classes.root, caption: classes.caption 
    }} />

我有两个示例代码。代码示例1在删除时崩溃,而代码示例2工作正常。只有 arr ++ 的区别。这两个代码示例究竟发生了什么。有人可以解释一下吗?

3 个答案:

答案 0 :(得分:7)

无法删除单个元素,因为必须使用delete来删除已分配的相同内存。

崩溃是因为new返回的指针必须与用于调用delete的指针相同。

增加指针并使用它意味着程序不再看到其他簿记信息(可能存储在new返回的指针之前)

此外,您应该使用delete[]删除数组。因此,以下是未定义的行为:

char * arr = new char[10];
delete arr;

应该是:

char * arr = new char[10];
delete[] arr;

答案 1 :(得分:1)

C ++不支持删除数组中的元素,因为C数组是保留的连续内存块。您可能正在寻找C++ vectors

使用它们,您可以执行以下操作:(来自链接的修改示例代码)

#include <iostream>
#include <vector>

int main()
{
    // Create a vector containing integers
    std::vector<int> v = {7, 5, 16, 8, 6, 3, 5, 6};

    // Add two more integers to vector
    v.push_back(25);
    v.push_back(13);

    // Iterate and print values of vector
    for(int n : v) {
        std::cout << n << '\n';
    }

    v.erase(3);
    v.erase(5, 6);

    for(int n : v) {
        std::cout << n << '\n';
    }
}

可以在https://msdn.microsoft.com/en-us/library/9xd04bzs.aspx#vector__erase找到有关Visual C ++的特定参考。

答案 2 :(得分:0)

删除分配数组的正确方法,

char * arr = new char [10]; 删除[] arr;

//当你这样做时,一个元素将被删除并导致泄露

char * arr = new char[10];
arr++ 
delete[] arr;