| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Проблема с памятью |
| Автор: greykardinal 1.6.2011, 12:24 | ||||
| Добрый день Написал программу работы с текстовым файлом. Программа читает данные из файла, сортирует их , преобразует в число и раскладывает в двумерный массив. Размер файла неизвестен, поэтому все размеры динамические. Привожу код выделения памяти
Проблема такая: Code Guard ругается на следующий участок кода:
пишет "Attempt to access 11 bytes at ..., that is at heap bloc which is only 10 bytes long" То бишь ему требуется на один байт больше чем я выделил. Но если выделить больше байт (1000) проблема не решается. Подскажите, в чем моя ошибка. Извините если тема ранее поднималась. |
| Автор: bsa 1.6.2011, 13:54 |
| greykardinal, пройдись отладчиком. Наверняка L больше 10. |
| Автор: greykardinal 1.6.2011, 14:01 |
| bsa, не понял причем тут L - это же другой размер массива. L должно быть не больше Len. Так то L больше 10 |
| Автор: bsa 1.6.2011, 14:57 |
| greykardinal, ругается у тебя на Wx[i], значит (если указатель Wx не меняется) i выходит за границу выделенной области. В цикле у тебя i от 0 до L невключительно. Значит, выход за груницу возможен, когда L больше Len. |
| Автор: greykardinal 1.6.2011, 15:53 |
| bsa, согласен, возможно. Но я проверяю условие Len>L до приведенного кода. Если L>Len, то программа завершается принудительно. Тут все чисто |
| Автор: xvr 1.6.2011, 16:38 |
| Полагаю, что ругается на atof - Wx[i] это строка, и у ТС она явно не терминированна 0 |
| Автор: greykardinal 2.6.2011, 05:14 | ||
xvr, ругается именно на atof. Действительно, строка не терминирована. Спасибо за подсказку P.S. Подскажите, как исправить код, а то я никогда на подобное внимания не обращал и не знаю, что менять - может код выделения памяти, может сам тип данных? |
| Автор: bsa 2.6.2011, 09:55 |
| greykardinal, выдели память под Len+1 чаров, и сделай Wx[Len] = '\0'; после выделения. |
| Автор: greykardinal 2.6.2011, 10:23 | ||
bsa, все равно ругается на строчку
Пишет, что пытаюсь использовать 11 байт, а выделил только 10 Ругается уже при i=0 |
| Автор: greykardinal 2.6.2011, 10:39 |
| Попробовал vector - не получилось, std-ишные функции тоже не катят. Че делать - не знаю Добавлено через 14 минут и 21 секунду все, решил. bsa, xvr, большое спасибо за помощь |