我有以下程序:C++中的内存管理。
//simple array memory test.
#include <iostream>
using namespace std;
void someFunc(float*, int, int);
int main() {
int convert = 2;
float *arr = new float[17];
for(int i = 0; i < 17; i++) {
arr[i] = 1.0;
}
someFunc(arr, 17, convert);
for(int i = 0; i < 17; i++) {
cout << arr[i] << endl;
}
return 0;
}
void someFunc(float *arr, int num, int flag) {
if(flag) {
delete []arr;
}
}
当我把下列gdb
,并插入一个断点在float *arr ...
,我通过程序步骤和注意以下事项:
- 打印阵列
arr
初始化后给我1 17次。 - Inside
someFunc
我也在delete
之前打印arr
以获得与上面相同的打印件。 - 回到
main
,当我打印arr
时,我得到第一位数字为0,接着是16 1.0。
我的问题:
1.一旦阵列已someFunc
被删除了,我怎么还能够访问arr
没有someFunc
或main
段错误?
2.上面的代码片段是在更大的程序中运行的另一段代码的测试版本。我在两个地方观察到相同的行为(第一个数字是0
,但所有其他数字都是相同的。如果这是一些无法解释的内存错误,我如何在不同区域观察相同的东西?
3.有些解释填补了空白我的理解是最欢迎的。
或至少不立即 - 有缓存取决于系统的记忆本质,其行为有所不同。 –