请注意,问题已更改,不再符合答案
我正在尝试创建内存来保存浮动缓冲区(这里是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;
答案 0 :(得分:5)
你不能。
您可以 delete
从new
获得的价值。保留原始指针。
尽量避免随时修改指针 ,无论它看起来多么聪明/专业/“精彩”。没有理由(欢迎你证明我错了)。改用下标;它们更易读,更容易调试,并且可以避免这些问题。
答案 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。然后你不必担心删除。