|
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 2
|
||||||
segmentation fault(29.11.2013, 17:14. Показов 9337. Ответов 18
Метки нет (Все метки)
Chto ne tak? Pomogite...
0
|
||||||
| 29.11.2013, 17:14 | |
|
Ответы с готовыми решениями:
18
Segmentation fault Segmentation fault strcpy() Segmentation fault(Core dumped) |
|
8 / 6 / 5
Регистрация: 11.11.2013
Сообщений: 75
|
|
| 29.11.2013, 18:30 | |
|
Анечка, удивительно, что у вас этот код вообще скомпилировался. Вы ж пытаетесь создать дивный гибрид статического и динамического массива. Суть в том, что размер для статического массива не задается динамически, а динамический массив не задается так, как вы его задали.
Мало того. Вы с чистой совестью даете компьютеру команду выделить а хрен его знает сколько памяти. В строке с malloc'ом значение n еще не задано. Начните с этого. И вообще, лучше словами объясните, что должна делать программа. А то ваш код, кажется, не отражает всю глубину ваших замыслов
0
|
|
|
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 2
|
|
| 29.11.2013, 18:38 [ТС] | |
|
программа должна создать массив с рэндомным количеством чисел, выбранных тоже рэндомно) и вывести его на экран. каким то образом код скомпилировался, НО при выполнении ./ выдаёт segmentation fault.
0
|
|
|
8 / 6 / 5
Регистрация: 11.11.2013
Сообщений: 75
|
||||||
| 29.11.2013, 19:34 | ||||||
|
Я не могу сказать, почему конкретно выдавался сегментейшн фолт. У меня этот код предсказуемо не скомпилировался.
Должно быть как-то так:
P.S. Пардон, в вашем коде в malloc я не увидела, что там число, а не n передается. Если у вас действительно такой пофигистичный компилятор, то ошибка памяти могла возникнуть при попытке передать ссылку на выделенную память в статистический массив неизвестного размера.
1
|
||||||
|
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
|
||
| 29.11.2013, 21:56 | ||
|
А компилятор не обижайте. Cогласно стандарту (включая C99) он ДОЛЖЕН компилировать указанный код, несмотря на его абсурд, выдав соответствующие предупреждения. (об использовании неинициализированной переменной gcc сообщает при наличии опции -Wall)
0
|
||
|
8 / 6 / 5
Регистрация: 11.11.2013
Сообщений: 75
|
|||||||
| 29.11.2013, 22:35 | |||||||
|
У меня именно gcc 4.7 не хотел компилить указанный код, ругаясь на строку:
0
|
|||||||
|
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
|
|||||||||||
| 29.11.2013, 23:22 | |||||||||||
PS.
0
|
|||||||||||
|
8 / 6 / 5
Регистрация: 11.11.2013
Сообщений: 75
|
|
| 30.11.2013, 00:59 | |
|
Прошло без замечаний только после замены строки на Вашу. Выдал сегментейшн фолт. Цель достигнута!
![]() Если модератор не сочтет за флейм, то интересно спросить: что происходит здесь на уровне памяти? 1) создается статический массив случайной длины 2) указатель, возвращаемый функцией маллок, записывается в этот массив (в конец массива) в виде long. На 64-х битной системе в этот момент побеждают зло и хаос, о чем и гласит название темы. 3) Если будет 32-х битная система, то с большой степенью вероятности все прокатит. Последний элемент массива, куда записался адрес памяти, будет перезаписан в цикле, так что пользователь даже не заметит. Ночью моск не варит, но как-то так получается. Я тоже недолго программирую, мне это интересно. Да и автору темы полезно будет.
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||||
| 30.11.2013, 02:26 | ||||
|
Попробуйте из этой строки удалить "str[n]=(int)" и оставить только malloc, может свалиться на нем же, если повезет с данными на стеке. Добавлено через 5 минут И эта ошибка будет воспроизводиться не всегда. Если увеличить размер стека каким-нибудь ulimit -s, то ее можно избежать и приложение не будет падать.
0
|
||||
|
8 / 6 / 5
Регистрация: 11.11.2013
Сообщений: 75
|
||||||||||||
| 30.11.2013, 03:01 | ||||||||||||
|
На Suse 12.3 падает даже при закомментированной строке с маллоком. НЕ падает, если задать размер статического массива при объявлении:
И ладно, пускай ноль! Ведь массив нулевой размерности тоже можно было объявить: #
Если все дело в n, почему так важно, что размерность не объявлена черным по белому? В чем (с точки зрения процессора) разница между случайной областью памяти, которую компилятор автоматически переведет в число, и "осмысленно" присвоенным значением?
0
|
||||||||||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||||||
| 30.11.2013, 03:05 | ||||||
|
0
|
||||||
|
8 / 6 / 5
Регистрация: 11.11.2013
Сообщений: 75
|
|||||||||||
| 30.11.2013, 03:06 | |||||||||||
От чего зависит разница в реакции различных linux ОС на один и тот же код? Не первый раз встречаю, что сегментейшн фолт постоянно выдается на одной системе, и далеко не каждый раз - на другой.
0
|
|||||||||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||||||||||
| 30.11.2013, 03:17 | ||||||||||
|
Это зависит не от твоей ОС. Добавлено через 3 минуты
0
|
||||||||||
|
8 / 6 / 5
Регистрация: 11.11.2013
Сообщений: 75
|
|||
| 30.11.2013, 03:22 | |||
Разве это разные области памяти? Это одна и та же переменная n, как я понимаю. В одном случае там наше значение, в другом - мусор, из которого компилятор сделает значение. Заметьте, я не утверждаю, что я права.)
Добавлено через 2 минуты [QUOTE=Vourhey;5412821] /QUOTE]Узбагойся.
0
|
|||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|||||||||||
| 30.11.2013, 03:37 | |||||||||||
что такое?
Но если у меня берется случайное значение, то массив может занять область от 0 до 16000, например. Получается, что адрес 16000 уже выходит за пределы памяти выделенной для стека. И у нашей программы доступа туда уже может не оказаться (как повезет). И вызов функции еще до своего начала упадет при ошибке доступа к 16001 адресу. Так понятнее? Добавлено через 5 минут ![]() Протестируй:
1
|
|||||||||||
|
8 / 6 / 5
Регистрация: 11.11.2013
Сообщений: 75
|
|||
| 30.11.2013, 03:37 | |||
0
|
|||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|||
| 30.11.2013, 03:41 | |||
![]() Добавлено через 1 минуту http://www.ozon.ru/context/detail/id/5061928/ http://www.ozon.ru/context/detail/id/2631566/ И книги по отладке могут содержать в себе по частям разную информацию, обычно там это описывается.
0
|
|||
|
8 / 6 / 5
Регистрация: 11.11.2013
Сообщений: 75
|
|
| 30.11.2013, 03:57 | |
|
Прекрасные книги, спасибо.
0
|
|
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
||||||||
| 07.12.2013, 00:49 | ||||||||
|
чтобы понять, нужно сначала это дело разравнять (сделать читаемым)
0
|
||||||||
| 07.12.2013, 00:49 | |
|
Помогаю со студенческими работами здесь
19
Bad allocation || Segmentation fault Исправить ошибку, приводящую к segmentation fault Segmentation fault в конце работы программы XDestroyImage(image); Segmentation fault (core dumped) При записи в бинарный файл происходит segmentation fault Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|