Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / нужно ли удалять указатель на символьный массив созданный в куче(динамически распределяемо / 3 сообщений из 3, страница 1 из 1
08.08.2015, 00:41
    #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
08.08.2015, 05:38
    #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
08.08.2015, 08:58
    #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
Форумы / C++ [игнор отключен] [закрыт для гостей] / нужно ли удалять указатель на символьный массив созданный в куче(динамически распределяемо / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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