Почему от освобождения переменной ломается вывод?
#include <iostream>
#include <windows.h>
#include <vector>
bool str(std::vector<char*>& vector)
{
char* name = (char*)malloc(MAX_PATH);
if (name != 0) { ZeroMemory(name, MAX_PATH); };
lstrcatA(name, "Name: ");
lstrcatA(name, "Anastasya");
lstrcatA(name, "\nFNAME: ");
lstrcatA(name, "Belkova");
vector.push_back(name);
free(name);
return 1;
}
int main()
{
std::vector<char*> name;
str(name);
std::cout << name[0];
}
Если я пишу в функции str free(name) у меня вывод в консоли примерно такой
▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
А если я убираю free(name) то выводит всё как надо. В чем ошибка и что я упустил?
Ответы (1 шт):
Автор решения: EOF
→ Ссылка
Дело в том, что указатели хранят только адрес. Вы выделяете память с помощью malloc и сохраняете адрес этой памяти в указателе в векторе и сразу освобождаете эту память. В результате в векторе находится указатель на память, которой Ваша программа уже не владеет. На момент вывода, этой памятью уже могла пользоваться другая программа, которая изменила её содержимое, что Вы и наблюдаете. В С++ есть класс std::string, который предназначен для работы со строками. Используйте его.