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)
你不能.
你只能 delete得到你的价值new.保留原始指针.
尽量避免修改指针在任何时候,无论多么聪明/专业/"辉煌"它看起来.没有理由(欢迎你证明我错了).改用下标; 它们更易读,更容易调试,并且可以避免这些问题.
在增加指针之前复制指针.
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)
或者只是不要将指针用于动态数组,而是使用向量.然后你不必担心删除.