glibc обнаружил free () неверный размер (быстрый) ошибка?

0

Я получаю эту ошибку, когда выполняю следующую функцию, и я понятия не имею, что это значит. Вот функция:

void readf2()
{
    std::ifstream inFile("f2",std::ios_base::binary);
    std::string str(2, '\0');
    int i = 0;
    while(inFile.read(&str[i],2)){
    cout<<"Success: ["<< i << "] = "<< (int)str[i];                        ;
    cout<<"\n";
    i++;
    }
}

Функция работает некоторое время, записывая различные номера в консоль, а затем бум падает с этой ошибкой, обратной сетью и картой памяти. Это происходит потому, что я освобождаю адрес памяти, который не существует?

Теги:

1 ответ

1

Скорее всего, вы даете read вызову указатель на память, который не принадлежит вам.

str[i] возвращает смещение в строке, но это не гарантирует, что у вас достаточно памяти для чтения в это место (+2).

То, что вы, вероятно, имели в виду, состояло в том, чтобы иметь массив int s и использовать i в качестве индекса для этого:

void readf2()
{
    std::ifstream inFile("f2",std::ios_base::binary);
    std::vector< int >  str; // if you're reading int - use int, not string
    int i = 0;
    int j;
    while(inFile.read(&j,sizeof(int))){ // check what the content is here
    str.push_back(j);
    cout<<"Success: ["<< i << "] = "<< str[i];
    cout<<"\n";
    i++;
    }
}
  • 0
    Так как же мне предотвратить это?
  • 0
    Теперь у меня ошибка в сегменте. Я думаю, что это может быть цикл пока. Я попробую и подправлю
Показать ещё 12 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню