指针外部内存分配时如何使用delete []?

时间:2011-07-09 03:48:00

标签: c++ pointers segmentation-fault delete-operator

请注意,问题已更改,不再符合答案

我正在尝试创建内存来保存浮动缓冲区(这里是4个浮点数)。 我已经分配了内存,内存中的所有4个值都是零。

循环当然迭代4次,但是第4次将ptr移动到我分配的内存之外。所以在循环结束时,我将ptr移回我分配内存的位置,然后使用delete[]

我的问题是:当我拨打delete[]时,是否删除了整个4-float缓冲区? (这显然是我需要的!)

int inFramesToProcess = 4;
float *ptr = new float[inFramesToProcess]();

    for(UInt32 i = 0; i < inFramesToProcess; ++i) {
        ptr++;
    }

    ptr -= inFramesToProcess;

delete[] ptr; 

2 个答案:

答案 0 :(得分:5)

你不能。

您可以 deletenew获得的价值。保留原始指针。

一般规则:

尽量避免随时修改指针 ,无论它看起来多么聪明/专业/“精彩”。没有理由(欢迎你证明我错了)。改用下标;它们更易读,更容易调试,并且可以避免这些问题。

答案 1 :(得分:5)

在递增之前复制指针。

int inFramesToProcess = 4;
float *ptr = new float[inFramesToProcess]();
float *ptr_copy = ptr;

    for(UInt32 i = 0; i < inFramesToProcess; ++i) {
        ptr_copy++;
    }

delete[] ptr;

或者只是不要将指针用于动态数组,而是使用vector。然后你不必担心删除。