У меня есть следующая программа:
//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 раз. - Внутри
someFunc
я также печатаю arr
до delete
, чтобы получить тот же отпечаток, что и выше. - При возвращении в
main
, когда я печатаю arr
,Я получаю первую цифру как 0, а затем 16 1.0s.
Мои вопросы:
1. Как только массив был удален в someFunc
, как я по-прежнему могу получить доступ к arr
без сегментации в someFunc
или main
?
2. Приведенный выше фрагмент кода является тестовой версией другого фрагмента кода, который выполняется в более крупной программе.Я наблюдаю одинаковое поведение в обоих местах (первая цифра 0
, но все остальные одинаковы. Если это какая-то необъяснимая ошибка памяти, как я наблюдаю одно и то же в разных областях?
3. Некоторые пояснения, которые необходимо заполнитьпробелы в моем понимании приветствуются.