Обращаюсь к знатокам студии.
Есть консольная прога, которая делает большой и толстый расчет. На одной из итераций она выдает сообщение об ошибке доступа в память (классика "память не может быть read"), при этом диспетчер задач сообщает, что кушает она всего ~760 килобайт. У меня есть предположение, что прога просто не может выйти за адрессацию дальше 640 килобайт и глохнет, ибо памяти ей надо гораздо больше. Как быть?
Я так думаю, что нужно ее организовать как полноценное 32-разрядной приложение windows, но как это сделать с наименьшими затратами, чтоб не пришлось рисовать окошки и вообще задумываться над всей этой галиматьей с WinAPI?
Scrama писал: классика "память не может быть read"
Эта классика может свидетельствовать о чем угодно. Более неинформативное сообщение об ошибке - только Access Violation
Обычно это случается при неправильной адресации указателей, выходе за пределы массива и т.п. Причем вылезти она может где угодно. Я сам убил пару дней, пытаясь отловить один такой баг в своем движке...
Цитата:
Scrama писал: Я так думаю, что нужно ее организовать как полноценное 32-разрядной приложение windows, но как это сделать с наименьшими затратами, чтоб не пришлось рисовать окошки и вообще задумываться над всей этой галиматьей с WinAPI?
Сделать консольное 32-разрядное приложение
Кстати, 16-разрядное ты при всем желании в студиии 6.0 не скомпилишь - это надо какие-то древние компиляторы откапывать или писать прогу на языке ассемблера и собирать через debug.com
Так почему она тогда упирается в свои 760 килобайт и дальше не выделяет?
Там именно что очень странная ситуация - для 19 итераций все пучком, овтет правильный, работа ровная и аккуратная вне зависимости от исходных данных, а на 20 итерации вылетает с неверной адресацией.
Я, конечно, это дело все перепишу на Дельфах, но человеку удобнее иметь именно плюсовое приложение
Если ты определил, на какой именно итерации она вылетает, то запускай дебаггер, делай останов на это итерации (скажем, через __asm int 3) и пошагово ее выполняй дальше. Какие тут еще можно дать советы?
проверить, действительно ли винда не дает памяти очень легко.
После маллока ставим брекпоинт или ассерт на предмет ненулевого указателя.
Но я почти уверен что дело не в этом.