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

Jim*_*myB -1 c++ pointers segmentation-fault delete-operator

请注意,问题已更改,不再与答案匹配

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

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

我的问题是:我打电话时是否删除了整个4浮点缓冲区delete[]?(这显然是我需要的!)

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

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

    ptr -= inFramesToProcess;

delete[] ptr; 
Run Code Online (Sandbox Code Playgroud)

Meh*_*dad 5

你不能.

只能 delete得到你的价值new.保留原始指针.

一般规则:

尽量避免修改指针在任何时候,无论多么聪明/专业/"辉煌"它看起来.没有理由(欢迎你证明我错了).改用下标; 它们更易读,更容易调试,并且可以避免这些问题.


Ben*_*ley 5

在增加指针之前复制指针.

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

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

delete[] ptr;
Run Code Online (Sandbox Code Playgroud)

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