Как получить имя переменной-указателя, если адрес известен? - PullRequest
0 голосов
/ 20 июня 2019

Когда я запускаю свой проект, он загружается и начинает работать, но через некоторое время вылетает. Журнал, который я получаю, таков:

Попытка освободить недействительный указатель 0x2df2fc6b9000

Теперь это код хрома, и я не знаю, где в этой базе кода программа работает неправильно. Поэтому я хотел знать, возможно ли получить имя переменной, дающее адрес 0x2df2fc6b9000. Thankyou.

Ответы [ 3 ]

2 голосов
/ 20 июня 2019

Вы не можете.

Например:

int i = 10;
int* p1 = &i;
int* p2 = p1;

Учитывая &i, нельзя сказать, что переменная p1 или p2.Для всех нас, возможно, вообще не может быть p1 или p2.

Это сообщение об ошибке является убедительным свидетельством того, что ваш код использует память неправильно.Вам нужно будет попытаться уменьшить ваш код до Минимальный воспроизводимый пример .Вы можете найти источник проблемы в процессе этого.

0 голосов
/ 20 июня 2019

Вы могли бы найти имя переменной, если вы запускаете в отладчике отладочную версию вашей программы с включенной информацией о символах. Отладчик может отображать список символов в стеке с соответствующими адресами в той точке программы, где происходит сбой приложения. В вашем случае вам придется найти указатель переменной со значением, содержащимся в ошибке.

Отладчик также должен отображать строку, где произошла ошибка. Возможно, будет проще найти ошибку, посмотрев на код вокруг этой строки, чем искать переменную-нарушителя по содержимому.

Без информации о символах, включенной в программу, невозможно сопоставить ячейки памяти с именами переменных.

0 голосов
/ 20 июня 2019

Невозможно определить, какая переменная хранится в конкретной памяти, если вы не печатаете адреса памяти и имена переменных из вашей программы.

В современном C ++ вы можете использовать умные указатели: unique_ptr, shared_ptr и weak_ptr.Они используют RAII, поэтому они очистят память для вас.

Вместо того, чтобы самостоятельно управлять указателями с помощью новых и удаленных, попробуйте использовать интеллектуальные указатели как можно больше.

...