У вас много переменных, неинициализированных в следующей строке:
int rmdLength,rmdWidth,rmdSmallSquares,rmdLengthTimes,rmdWidthTimes,SIZE,temp=0;
Примечание: В приведенной выше строке не будет инициализировать все переменные 0
.Он только инициализирует temp
0
.
Чтобы инициализировать все переменные 0
, вы должны сначала объявить их, а затем инициализировать их следующим образом:
int rmdLength, rmdWidth, rmdSmallSquares, rmdLengthTimes, rmdWidthTimes, SIZE, temp;
rmdLength = rmdWidth = rmdSmallSquares = rmdLengthTimes = rmdWidthTimes = SIZE = temp = 0;
использование неинициализированных переменных приводит к неопределенному поведению:
из онлайн-ссылки cpp на неинициализированные переменные :
Значение в неинициализированной переменной может быть любым - оно непредсказуемо,и может отличаться при каждом запуске программы. Чтение значения неинициализированной переменной - неопределенное поведение - что всегда плохая идея.Он должен быть инициализирован значением, прежде чем вы сможете его использовать.
Кроме того, в следующем коде вы используете неинициализированную переменную rmdLengthTimes
в качестве проверки для перебора массива:
for(int i=0;i<rmdLengthTimes;i++){
arr[i] = wdth;
}
Это приведет к доступу к outадрес памяти, который также является неопределенным поведением:
с wiki :
Поведение некоторых языков программирования - наиболее известный Cи C ++ - в некоторых случаях не определено .В стандартах для этих языков семантика определенных операций описана как неопределенная.Эти случаи обычно представляют однозначные ошибки в коде, например, , например, индексирование массива за пределами его границ .
Так что правильная инициализация всех переменных перед их использованием решит вашу проблему.