删除部分数组不允许,为什么? [重复]

问题描述 投票:-1回答:1

考虑,在程序下面给出运行时错误。这个问题的关键是要了解内存视图和管理。

#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;
}
c++
1个回答
1
投票

new分配一块内存。您可以使用delete释放该内存,但必须传递new返回的相同地址。这就是它的工作原理。你不能将任意地址传递给delete

另一个选择是使用malloc()free()。这些是较旧的功能,但您也可以使用realloc()来调整内存大小。然后,如果要删除部分数组,可以将其调整为较小。但是......您仍然必须根据需要复制任何数据才能正确形成调整大小的数组。那不是自动的。

© www.soinside.com 2019 - 2024. All rights reserved.