powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / нужно ли удалять указатель на символьный массив созданный в куче(динамически распределяемо
3 сообщений из 3, страница 1 из 1
нужно ли удалять указатель на символьный массив созданный в куче(динамически распределяемо
    #39025403
polin11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, программа состоит из 2 функций (main и fun), программа меняет значение указателя на символьный массив созданный в динамически распределяемой памяти.
Программ меняет символьный массив "abc" на "cba" ошибок нет. Вопрос в другом, нужно ли удалять указатель из кучи в функции main или fun, не произойдет ли утечка памяти,
не становиться ли указатель str_f из функции fun "диким" при завершении функции fun??? При попытке удалить указатель delete str_f или delete[] str_f, при выполнении программы выходит ошибка.




Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <windows.h>

using namespace std;
char* fun()
{
   char* str_f=new char[5];
   ZeroMemory(str_f, 5);
   str_f="cba";
   /* delete str_f;  нужно ли удалять указатель массив char из динамически распределяемой памяти. При выполнении выходит ошибка */
   return str_f; 
}
int _tmain(int argc, _TCHAR* argv[])
{
	
	int n=5;
	char* str=new char[5];
	ZeroMemory(str, 5);
	str="abc";
	cout<<str <<endl;
	str=fun();
	cout<<str <<endl;
	/* delete[] str; нужно ли удалять указатель массив char из динамически распределяемой памяти. При выполнении выходит ошибка */
	cout<<str;
	getch();
	return 0;
	
}
...
Рейтинг: 0 / 0
нужно ли удалять указатель на символьный массив созданный в куче(динамически распределяемо
    #39025420
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polin11Подскажите, программа состоит из 2 функций (main и fun), программа меняет значение указателя на символьный массив созданный в динамически распределяемой памяти. Менять "значение указателя на символьный массив" это как менять ноги на штаны. Были ноги, стали штаны; попытайся пройтись...

polin11
Код: plaintext
1.
2.
3.
4.
5.
6.
  char* str_f=new char[5];
   ZeroMemory(str_f, 5);
   str_f="cba";
   /* delete str_f;  нужно ли удалять указатель массив char из динамически распределяемой памяти. При выполнении выходит ошибка */
   return str_f; 
}

Выделяем кусок памяти на куче, ставим указатель на него.
Очищаем этот кусок.
Ставим указатель на кусок памяти в константной памяти (при этом забываем о том куске который на куче остался, ну и фиг с ним).
Пытаемся освободить кусок в константной памяти.
Возвращаем указатель на кусок в константной память.

polin11
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
int _tmain(int argc, _TCHAR* argv[])
{
	
	int n=5;
	char* str=new char[5];
	ZeroMemory(str, 5);
	str="abc";
	cout<<str <<endl;
	str=fun();
	cout<<str <<endl;
	/* delete[] str; нужно ли удалять указатель массив char из динамически распределяемой памяти. При выполнении выходит ошибка */
	cout<<str;
	getch();
	return 0;
	
}

Определяем переменную n, задаем ей значение. Нафига определяем? А просто так, от нефиг делать.
Выделяем кусок памяти на куче и ставим указатель на него.
Очищаем этот кусок памяти.
Забываем про этот кусок памяти и ставим указатель на константный кусок.
Выводим значение из константного куска.
Переопределяем указатель на то что вернула функция.
Выводим текст из того что вернула функция.
Опять пытаемся удалить то что удалить нельзя по определению.
Еще раз выводим.
Ждем нажатия кнопки
Возвращаем ноль.
...
Рейтинг: 0 / 0
нужно ли удалять указатель на символьный массив созданный в куче(динамически распределяемо
    #39025432
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока так:

polin11
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <windows.h>

using namespace std;
char* fun()
{
   char* str_f=new char[5];
   ZeroMemory(str_f, 5);
   str_f="cba";  // УТЕЧКА ПАМЯТИ
   /* delete str_f;  нужно ли удалять указатель массив char из динамически распределяемой памяти. При выполнении выходит ошибка */
   return str_f; 
}
int _tmain(int argc, _TCHAR* argv[])
{
	
	int n=5;
	char* str=new char[5];
	ZeroMemory(str, 5);
	str="abc";// УТЕЧКА ПАМЯТИ
	cout<<str <<endl;
	str=fun();
	cout<<str <<endl;
	/* delete[] str; нужно ли удалять указатель массив char из динамически распределяемой памяти. При выполнении выходит ошибка */
	cout<<str;
	getch();
	return 0;
	
}
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / нужно ли удалять указатель на символьный массив созданный в куче(динамически распределяемо
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]