mr_qpdb
@mr_qpdb
⏱ - is not eternal

Как очистить выделенную память адреса под адрес указателя на первый элемент строки?

Вроде делаю все правильно, но уже 2-й день ломаю голову почему не получается освободить выделенную память:

#include <stdio.h>
#include <stdlib.h>

int	main(void)
{
	const char **text;
	const char *smth = "some";

	text = (const char**)malloc(sizeof(char*));
	if(NULL == text) return 0;

	text = &smth;
	printf("%s\n", text[0]);
	
	free(text);
	text = NULL;

	return 0;
}
  • Вопрос задан
  • 184 просмотра
Решения вопроса 1
mr_qpdb
@mr_qpdb Автор вопроса
⏱ - is not eternal
#include <stdio.h>
#include <stdlib.h>

int	main(void)
{
  const char **text;
  const char *smth;
  
  smth = "some";

  text = (const char**)malloc(sizeof(char*));
  if(NULL == text) return 0;

  *text = smth;
  printf("%s\n", text[0]);
  
  free(text);
  text = NULL;

  return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Adamos
@Adamos
// выделяется память размером с указатель (4/8 байт для x32/x64), ее адрес записывается в text
text = (const char**)malloc(sizeof(char*));
// в text записывается адрес другой строки, а где там была выделена память - больше никто не знает
text = &smth;
// освобождается та память, на которую указывает text - это переменная smth. Теперь память, в которой лежит эта переменная, может в любой момент быть заменена при новом выделении памяти, и smth получит новое значение, не имеющее никакого отношения к той строке, на которую оно указывало изначально
free(text);
Ответ написан
Если память не изменяет, то нужно delete[]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы