考虑下面的程序,它给出了运行时错误。这个问题的关键是要了解记忆观和管理。
#include<iostream>
using namespace std;
int main(void) {
char* arr = new char[10];
char* ptr = NULL;
for(int i = 0; i < 10; i++) {
arr[i] = 'a';
}
cout << arr;
ptr = &arr[5];
delete ptr;
cout << arr;
return 0;
}
答案 0 :(得分:1)
new
分配一块内存。您可以使用delete
释放该内存,但必须传递new
返回的相同地址。这是它的工作原理。您无法将任意地址传递给delete
。
另一种选择是使用malloc()
和free()
。这些是较旧的功能,但您也可以使用realloc()
来调整内存大小。然后,如果要删除部分数组,可以将其调整为较小。 但是...... 您必须仍然根据需要复制任何数据,以正确形成调整大小的数组。这不是自动的。