@pentagon9714

Как грамотно выделить память?

Здравствуйте!
Столкнулся со следующей проблемой - данная функция отлично работает в режиме отладки, но при обычном запуске в сборке release/debug вылетает с неизвестной ошибкой.

void inputToList()
{
	int i = 0;                                
	link current = list_watch;
	while (input[i] != '\0')
	{
		current->data = (char*)malloc(buf*sizeof(char));
		current->datalen = 0;
		while (input[i] != '\n')
		{
			current->data[current->datalen] = input[i];
			current->datalen++;
			if (current->datalen%buf == 0)
			{
				current->data = (char*)realloc(current->data, (buf + current->datalen)*sizeof(char));
			}
			i++;
		}
		current->data[current->datalen] = '\0';
		i++;
		blockscount++;
		if (input[i] != '\0')
		{
			current->next = (link)malloc(sizeof(link));
			current = current->next;
		}
		else
		{
			current->next = NULL;
		}
	}
}
  • Вопрос задан
  • 370 просмотров
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg Куратор тега Программирование
Любые ответы на любые вопросы
У вас как минимум переменная не инициализирована - list_watch.
Если это глобальная переменная, все становится намного хуже.

Проверка на ошибки также отсутствует - добавляйте.
Ответ написан
petermzg
@petermzg
Самый лучший программист
У вас
while (input[i] != '\n') i++;
А если этого '\n' нету, то вы пропуская '\0' вылетаете за строку.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект