0 / 0 / 1
Регистрация: 25.03.2018
Сообщений: 16
|
||||||
1 | ||||||
Stack smashing detected + Массивы + Random01.04.2018, 16:01. Показов 2070. Ответов 6
Метки нет (Все метки)
Здравствуйте. Пытаюсь реализовать программу, которая выполняла бы несколько задач.
1) Вычисление положительных чисел из массива X. 2) Вычисление наибольших 5-ти элементов из массива Y. 3) Сложение этих массивов (совмещение) в массив Z. 4) Вычисление суммы четырехзначных элементов массива Z. Также хочется дополнить, что для 4-ой задачи я беру в random от -10000 до 10000 (включая оба значения). (Возможно, что неверно) Считает-то оно правильно, даже очень, но ошибка, информации о которой в интернете не так много, меня напрягает. *** stack smashing detected ***: ./2 terminated Aborted (core dumped) Сам код:
И хочется сразу сказать. Мне известно, что подобные типы задач лучше решать с помощью динамических массивов, однако хочется попробовать и с помощью статических.
0
|
01.04.2018, 16:01 | |
Ответы с готовыми решениями:
6
Stack smashing detected. Ребята, перемешка данных, что не так? *** stack smashing detected ***: <unknown> terminated, программа завершает работу на цикле Ошибка: "Unhandled exception: Stack cookie instrumentation code detected a stack-based buffer overrun" stack smashing detected |
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
02.04.2018, 09:41 | 2 |
Ошибка всегда появляется или в зависимости от введённых чисел? Какой компилятор?
Вероятно где-то есть выход за границы массива. Ещё, возможно, массивы слишком длинные и не умещаются в стеке. В этом случае есть смысл использовать динамические массивы или std::vector с проверкой выхода индекса.
0
|
0 / 0 / 1
Регистрация: 25.03.2018
Сообщений: 16
|
|
02.04.2018, 09:49 [ТС] | 3 |
likehood,
1) Ошибка появляется ВСЕГДА. 2) Компилятор GCC под Linux. 3) Выхода за границы массива не замечал. Единственное, что меня пугает, так это наличие остаточной информации в ячейках, например: 1247124124. Понятное дело, что эта информация из оперативной памяти, однако вообще её наличие меня пугает... Мне казалось, что ячейки должны обнуляться. 4) Массивы не столь велики. 12-15 ячеек, которые я определяю в самом начале. Или Вы имеете ввиду что-то другое? 5) Про динамические массивы я уже писал. Чуть позже с ними ознакомлюсь. Хотелось бы исправить эту ошибку со статическими. А за вектор благодарю. Обязательно ознакомлюсь.
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
02.04.2018, 10:01 | 4 |
Сообщение было отмечено Flapch как решение
Решение
Но это не значит, что его не было.
Можно попробовать задать фиксированные (и достаточно большие) размеры массивов, и посмотреть сохранится ли ошибка. Если пропадёт, значит проблема в этом. Добавлено через 6 минут Собственно, язык С++ не поддерживает создание массивов, размер которых задаётся переменной, а не константой. Хотя многие компиляторы (включая gcc) поддерживают такую возможность в качестве нестандартного расширения. Но мой компилятор (mingw) это не поддерживает (по крайней мере по-умолчанию), так что мне пришлось сделать размеры массивов фиксированными, чтобы код скомпилировался. И у меня он работает без ошибок. Правда, это под Windows.
1
|
0 / 0 / 1
Регистрация: 25.03.2018
Сообщений: 16
|
||||||
02.04.2018, 10:02 [ТС] | 5 | |||||
likehood, каким образом... Сработало.
0
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
02.04.2018, 10:10 | 6 |
Сообщение было отмечено Flapch как решение
Решение
con равно 5
А здесь выход за границы массива, если g больше 5
1
|
0 / 0 / 1
Регистрация: 25.03.2018
Сообщений: 16
|
|
02.04.2018, 10:39 [ТС] | 7 |
likehood, точно, увидел. Спасибо большое. Решено.
0
|
02.04.2018, 10:39 | |
02.04.2018, 10:39 | |
Помогаю со студенческими работами здесь
7
Getwchar stack smashing detected [bcc32 Error] File1.cpp(19): E2316 'Stack<T>::Stack()' is not a member of 'Stack<T>' Массивы. Random Двумерные Массивы и random Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |