Top.Mail.Ru
Ответы
Аватар пользователя
11мес
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Си++ переполнение буфера. Программа не работает.

Увы, я не могу здесь привести исходный код (к тому же он огромен), но:

Программа выдает предупреждение "переполнение буфера". Она запускается, но не записывает данные в те массивы, где происходит "переполнение".

Что это такое вообще простыми словами? Программа пытается записать (а возможно и пишет) данные за пределы конца буфера, то есть - куда не следует.

Почему?

Если мне надо записать значение в энный элемент массива - почему он туда не записывается? Почему он оттуда не читается? За границы массива я не выхожу (а если бы вышел - программа бы даже не скомпилировалась), что я делаю не так?

А ещё лучше - как проблему исправить?


if (t < 3000) {
инфо[n][t][20739] = 2; // проблема находится здесь.
инфо[n][t][20740] = 0;
}

По дате
По рейтингу
Аватар пользователя
Новичок
11мес

За границы массива я не выхожу (а если бы вышел - программа бы даже не скомпилировалась)


Скомпилируется

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

12
 int* n = new int[10];
n[11] = 20; // переполнение буфера 

Откуда у тебя значения 20739 и 20740, у тебя массив на столько элементов? Меня смущают такие константы. Почему тебе надо именно в эти ячейки? Покажи мне код, где ты выделяшь память.

Аватар пользователя
Просветленный
11мес

Ты создаешь очень большой массив на стеке - стека не хватает.
Создавай его в куче, через new