C ++ с использованием getline () печатает: освобожденный указатель не был размещен в XCode - PullRequest
10 голосов
/ 10 февраля 2010

Я пытаюсь использовать std: getline (), но получаю странную ошибку во время выполнения:

malloc: * ошибка для объекта 0x10000a720: освобожденный указатель не выделен * установить точку останова в malloc_error_break для отладки

Это код, который выдает эту ошибку:

//main.cpp
#include <iostream>
#include <sstream>

int main (int argc, char * const argv[])
{
   std::istringstream my_str("demo string with spaces");
   std::string word;

   while (std::getline(my_str, word, ' ')) {
        std::cout << word << std::endl;
   }
   return 0;
}

Перед каждым словом я получаю эту ошибку. Судя по комментариям, это ошибка, специфичная для OSX / XCode. Есть намеки на это?

Обновление: Ошибка выводится только в режиме отладки. Если я строю этот код в режиме выпуска, все в порядке.

Обновление 2: Более подробную информацию по этому вопросу можно найти здесь .

Решение:

Набор

_GLIBCXX_FULLY_DYNAMIC_STRING = 1

в макросах вашего препроцессора на вкладке построения информации о целях.

Информация о системе:

OSX 10.6.2 | XCode 3.2 | g ++ 4.2 | отладочная конфигурация для i386

1 Ответ

10 голосов
/ 10 февраля 2010

По крайней мере, один человек сообщил о проблемах с g ++ 4.2.1 в Apple, которые, возможно, связаны с тем, что вам приходится иметь дело с неправильной конфигурацией стандартной библиотеки с определением _GLIBCXX_FULLY_DYNAMIC_STRING (не то, чтобы я что-то понял набираю здесь).

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

...