Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ exited with code -1073741571 при больших массивах

Автор: PiT2000 15.6.2011, 23:24

День добрый.
Есть вот какая проблема. При использовании больших массивов

................................
    double x[99999];
    double y1[99999];
    double y2[99999];
................................

во время запуска приложения вылазит ошибка exited with code -1073741571
при этом вот так работает нормально
................................
    double x[75000];
    double y1[75000];
    double y2[75000];
................................

пробовал объявлять так
................................
    double x[];
    double y1[];
    double y2[];
................................

при достижении какой то критической массы происходит таже ошибка

Win 7
версия Qt 4.7.1

Автор: RazrFalcon 16.6.2011, 2:07

В дебаг запускать пробовали?
Что бы найти место вылета.

Автор: Litkevich Yuriy 16.6.2011, 3:36

почитай http://www.qtcentre.org/threads/26604-Runtime-problem-in-Release-mode/page2

Автор: PiT2000 16.6.2011, 10:23

В System32 Qt библиотек нет.
PATH
C:\MinGW\bin;
C:\Qt\4.7.1\bin;
%SystemRoot%\System32

Судя по дебагу прерывается на входе в main

Автор: BRE 16.6.2011, 10:36

Нельзя такие большие массивы определять на стеке, он не резиновый.
Используй кучу.

Автор: PiT2000 16.6.2011, 11:45

Цитата(BRE @ 16.6.2011, 11:36) *
Нельзя такие большие массивы определять на стеке, он не резиновый.
Используй кучу.

Во оно самое. Спасибо.

Автор: Алексей1153 16.6.2011, 17:15

PiT2000, по стек уже сказали, про кучу тоже

а вот тут

Цитата
пробовал объявлять так
................................
    double x[];
    double y1[];
    double y2[];
................................

при достижении какой то критической массы происходит таже ошибка

- что ты имел в виду ?
По идее, это массив нулевой длины на стеке. То есть ты лез в стек, портя всё любое, пока не переполнил стек и не вывалилась ошибка переполнения

Автор: PiT2000 16.6.2011, 18:53

По идеи да. Ошибка вываливалась примерно в тот же период как и если указать линну

Автор: Алексей1153 17.6.2011, 13:06

PiT2000, как это вообще произошло у тебя. Не контролируешь индекс на выход за край массива. Обрати внимание на этот момент везде в программе :)

Автор: PiT2000 17.6.2011, 17:40

Ок. спс.

Автор: Кирилл 10.7.2013, 22:39

а теперь для чайников - что такое куча?


та же проблема с большим массивом.

Автор: Litkevich Yuriy 11.7.2013, 7:38

Цитата(Гость_Кирилл_* @ 11.7.2013, 0:39) *
а теперь для чайников - что такое куча?
буквально "куча памяти" (термин со времён когда памяти было очень мало в и стали появляться машины с дополнительной памятью, которая просто так была не доступна).

когда переменная создаётся так:
Type myVar;
то она создаётся на стеке (программы).
А когда создаётся динамически:
Type *pointerToMyVar; // указатель создаётся на стеке
pointerToMyVar = new Type();// объект создаётся на(в) куче
, то на/в куче (т.е. область общей памяти, не относящейся к данной программе)

http://ru.wikipedia.org/wiki/Куча_(нераспределённая_память)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)