我有以下代码行。
代码示例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 ++ 的区别。这两个代码示例究竟发生了什么。有人可以解释一下吗?
答案 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;