Проблем с динамическим выделенеием памяти

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
erty
Сообщения: 1
Зарегистрирован: 14 апр 2009, 09:58

Есть программа, работающая с массивом уазателей на *char;

Вид главной функции:

int _tmain(int argc, _TCHAR* argv[])
{
char **strings;
strings=input();
output(strings);
my_free(strings);
return 0;
}

Работает более мене корректно, но если добавить следующие строки
в main до основных функций

char *a[10];
for (int i=0; i<10; i++)
a=new char;

for (int i=0; i<5; i++)
delete a[i*2];

то всё работать перестаёт.

Вопроc: почему?

Понятно, что выделили память под массив а и не освободили,
но почему эта память мешает дальнейшей работе?

вот код для **input, там ,как говорится, чёрт ногу сломит:

Код: Выделить всё

char **input()
{
	char **strings;
	char s;
	int line=-1,len = 0;
	bool keep_input = 1;
	strings = new char*[1];
	while (keep_input)
	{
		len = 0;
		strings = (char**)realloc(strings,(++line+1)*sizeof(char*));
		strings[line] = new char[1];		
		strings[line][len] = '\0';

		while ((s=getchar())!='\n'){
			strings[line][len]=s;
			realloc(strings[line],(++len+1)*sizeof(char));
			strings[line][len] = '\0';		
		};
		keep_input=len>0;
	};
	return strings;
}
Rycharg
Сообщения: 28
Зарегистрирован: 15 апр 2009, 14:23
Откуда: SPb

Приветствую.
Есть предположение, что проблема не в блоке перед, а в самой input().
erty писал(а):

Код: Выделить всё

char **input()
{
	char **strings;
	char s;
	int line=-1,len = 0;
	bool keep_input = 1;
	strings = new char*[1];
	while (keep_input)
	{
		len = 0;
		strings = (char**)realloc(strings,(++line+1)*sizeof(char*));
		strings[line] = new char[1];		
		strings[line][len] = '\0';

		while ((s=getchar())!='\n'){
			strings[line][len]=s;
			[color="Magenta"]realloc(strings[line],(++len1)*sizeof(char));
[/color]			strings[line][len] = '\0';		
		};
		keep_input=len>0;
	};
	return strings;
}
В справке:
realloc returns the address of the reallocated block, which can be different than the address of the original block.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Этот код лучше вообще выкинуть. Такие вещи иначе делаются.
Ответить