|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.11.2008, 08:34 | #1 |
Ну и что? :)
Форумчанин
Регистрация: 20.10.2008
Сообщений: 129
|
c++ Builder, проблема с памятью
в общем есть расчетная программа (достаточно большая), выполняющая кучу арифметических операций. притом работа так же идет и со строками (входные данные) и указателями. но вот какая проблема: время от времени вылетает с ошибками (ссылается на память и выдает Invalid pointer operation...) притом что если запустить на расчет еще раз с теми же данными (не выходя из программы), то иногда считает, а иногда просто виснет
подскажите в чем проблема? кто либо сталкивался с таким? или же это просто у меня с памятью проблемы?
Учиться, учиться и еще раз учиться
|
20.11.2008, 10:21 | #2 |
Ну и что? :)
Форумчанин
Регистрация: 20.10.2008
Сообщений: 129
|
погонял 2 часа на тестах, в общем ошибка с указателем на файл:
Код:
Учиться, учиться и еще раз учиться
Последний раз редактировалось Ламер_001; 20.11.2008 в 10:23. |
20.11.2008, 17:10 | #3 |
...
Форумчанин
Регистрация: 01.06.2008
Сообщений: 134
|
Ламер_001, ошибка в строчке выше, в:
Код:
|
20.11.2008, 21:11 | #4 |
Ну и что? :)
Форумчанин
Регистрация: 20.10.2008
Сообщений: 129
|
а кто сказал что константу нельзя писать в переменную? int x = 10; то же самое: пишешь в переменную x константу 10
gargon поподробней нельзя? там куча книг. все читать особо времени нет
Учиться, учиться и еще раз учиться
Последний раз редактировалось Ламер_001; 20.11.2008 в 21:15. |
20.11.2008, 21:26 | #5 |
Форумчанин
Регистрация: 17.11.2008
Сообщений: 233
|
Ты пройди отладчиком и посмотри что заносится в твою temp после strcat...
Ну а потом мы уже будем думать! |
20.11.2008, 23:01 | #6 |
...
Форумчанин
Регистрация: 01.06.2008
Сообщений: 134
|
Ламер_001, константность гарантирует не изменение объекта. Для случая:
Код:
Код:
Код:
Но главный вопрос (точнее ответ на твой вопрос где ошибка) состоит в том, а откуда лишняя память под расширение? |
21.11.2008, 08:49 | #7 |
Ну и что? :)
Форумчанин
Регистрация: 20.10.2008
Сообщений: 129
|
уважаемый filosof_x86, предлагаю вам лично убедится в том что результаты работы программы при
const int a = 10; int b = a; и при const int a = 10; int &b = a; одинаковы и значение константы остается таким же: Код:
Код:
а память выделять должна strcat: "Header File string.h, mbstring.h Category Memory and String Manipulation Routines, Inline Routines Prototype char *strcat(char *dest, const char *src); wchar_t *wcscat(wchar_t *dest, const wchar_t *src); unsigned char *_mbscat(unsigned char *dest, const unsigned char *src); Description Appends one string to another. strcat appends a copy of src to the end of dest. The length of the resulting string is strlen(dest) + strlen(src). Return Value strcat returns a pointer to the concatenated strings." иначе как бы она выполянла "appends a copy of src to the end of dest" без "лишней" памяти? StarWorm, в temp заносится путь к файлу. все равно не работает. самое смешное что если даже вместо temp в fopen записать явно путь к файлу ("c:\\file.txt"), то все равно не находит. в общем решил не мучаться а в чекбокс дописать расширения и оттуда сразу брать имена. вроде заработало. всем спасибо.
Учиться, учиться и еще раз учиться
Последний раз редактировалось Ламер_001; 21.11.2008 в 08:57. |
21.11.2008, 18:48 | #8 | ||
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
Ламер, сравни:
Код:
Код:
Цитата:
strcat Цитата:
|
||
21.11.2008, 20:46 | #9 | |||
...
Форумчанин
Регистрация: 01.06.2008
Сообщений: 134
|
Цитата:
Тестируемый код: Код:
Ошибка компиляции: Цитата:
Ошибка компиляции: Цитата:
То, что компилятор от Борланда собрал этот код, говорит лишь о попустительстве самого Борланда, а не о моем незнании вещей. Все выше изложенное мной прописано в стандарте (хотя чтобы все это узнать, необязательно лезть в описание стандарта, достаточно взять более-менее нормальную книгу). Впрочем, Билдер никогда не мог похвастаться хорошим компилятором – хорошо, если багов нет, что уж говорить о следовании стандартам... Без "лишней" памяти strcat() залезет за пределы той памяти, что есть у нас в распоряжении. Память strcat() выделять недолжна, "лишнюю" память должен обеспечить сам программист. |
|||
22.11.2008, 11:59 | #10 |
Ну и что? :)
Форумчанин
Регистрация: 20.10.2008
Сообщений: 129
|
ладно хорошо сдаюсь) всем еще раз спасибо. проблема решена.
Учиться, учиться и еще раз учиться
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с памятью процесса | JRcoker | Win Api | 10 | 18.07.2009 22:22 |
Проблема с памятью в С++ | rJIaBkoM | Помощь студентам | 1 | 14.06.2008 14:25 |
динамическое управление памятью | oblom | Общие вопросы C/C++ | 12 | 16.02.2008 15:24 |
Проблема с C++ Builder 6 | Kocapb | Софт | 0 | 18.11.2007 18:54 |
Работа с памятью | Shurik Hacker | Общие вопросы Delphi | 7 | 22.06.2007 20:51 |