除了 NPE 的建议之外,这里还有内存泄漏:
float *output = new float[HighRange]; // allocate contiguous block HighRange * sizeof(float) bytes
output = new float[10 * 10]; // allocate contiguous block 100 * sizeof(float) bytes
除了这是不必要的之外,您还泄漏了内存,即您在第一个语句中分配了您从未释放过的存储空间,然后将新值分配给将第一个地址保存到先前分配的存储空间的指针。
使用 动态分配内存时new
,您需要相应地确保delete
它。对于数组,您需要执行以下操作:
float *output = new float[HighRange]; // allocate
delete [] output; // deallocate, note the delete[] operator
output = new float[10 * 10]; // allocate anew
注意:这只是为了显示 new/delete[] 的正确用法。如果您在示例中处理解除分配,我绝不建议您的代码会更好。:)