Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2009, 17:58   #1
Lavisa
Пользователь
 
Регистрация: 28.12.2008
Сообщений: 28
По умолчанию Ошибка сегментации при вызове system("PAUSE")

Ошибка сегментации при вызове system(PAUSE);
Редактор Dev-c++. Что может происходить плохого в такой функции?

Код:
int print_error( int error_id  )
{
    //getc(stdin);
    printf("\n\nprint_error\n");
    // Test output
    
//==============================================================================
    
    switch ( error_id )
    {
        case MAIN_NUMPARAM_ERR:
        {
            printf( "MAIN\n" );
            printf( "ERROR: program requires at least %d parameters\n", NUMPARAM ); 
            break;
        }
        case MAIN_INPPARAM_ERR:
        {
            printf( "MAIN\n" );
            printf( "ERROR: input is not defined, should be C or F\n" );
            break;
        }    
        
    } 
    system("PAUSE"); 
    exit(0);

Последний раз редактировалось Sazary; 29.07.2009 в 19:34.
Lavisa вне форума Ответить с цитированием
Старый 29.07.2009, 20:41   #2
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Проверил у себя, все отлично работает.
Ошибка сегментирования - это по сути то же самое, что и Access vioaltion - т.е. ошибка при обращении к памяти по некорректному адресу, ошибка при работе с указателями, массивами и т.п. Точно вылетает на вызове system ?
Проверяли только на GNU компиляторе Си или так же и на майкрасофтском компиляторе Си? Попробуйте передать строку не явно, а через указатель, например. Т.е. вот так:

Код:
char *cmd = "pause";
...
system(cmd);
oleg kutkov вне форума Ответить с цитированием
Старый 29.07.2009, 20:48   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

А еще лучше не использовать system, а использовать всякие _getch для задержки пока пользователь на кнопку не жмякнет. И что в функции делает exit(0)? Может там лучше написать return 0 ?
pu4koff вне форума Ответить с цитированием
Старый 29.07.2009, 21:35   #4
Lavisa
Пользователь
 
Регистрация: 28.12.2008
Сообщений: 28
По умолчанию

Ну, getc(stdin) сейчас напишу, как раньше. Просто так было красивей.

Последний раз редактировалось Lavisa; 29.07.2009 в 21:40.
Lavisa вне форума Ответить с цитированием
Старый 30.07.2009, 01:14   #5
Lavisa
Пользователь
 
Регистрация: 28.12.2008
Сообщений: 28
По умолчанию

Lavisa вне форума Ответить с цитированием
Старый 30.07.2009, 12:56   #6
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

не отвечают потому что мало кто пользуеться этим компилятором... все правильно и работать должно. мож луче VC++ Express попробовыть? и мой совет - если не работает этим способом, делай по другому, не думай долго, время тратишь
lennon вне форума Ответить с цитированием
Старый 30.07.2009, 16:33   #7
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Специально проверил на Dev-c++. Все нормально, да и что тут может быть не нормально, собственно говоря... Так к какому, все таки, результату приводит:
Код:
char *cmd = "pause";
...
system(cmd);
?
И точно ли ошибка выскакивает на system("PAUSE"); ?
oleg kutkov вне форума Ответить с цитированием
Старый 31.07.2009, 08:49   #8
Lavisa
Пользователь
 
Регистрация: 28.12.2008
Сообщений: 28
По умолчанию

Я не знаю, что происходит. Он после этого вылетал и на getc и на fopen и на malloc. Два дня убито. Что за проблема я не понимаю. Я уже отдельную тему создала. Надо переезжать в VisualStudio. Видимо, дело не в операторе, дело в каком-то загадочном, однозначно невоспроизводимом баге, который ползает по всей программе. Может какой-то глюк с devcpp, или я в 150 строчках ухитрилась написать что-то такое, что валит и прогу и редактор уже на 3-м компе.
Lavisa вне форума Ответить с цитированием
Старый 31.07.2009, 13:49   #9
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

А можно глянуть весь код, полностью ?
Еще, на вашем компьютере не мог завестись вирус ? Есть типы паразитов, вредящих компиляторам. Сам сталкивался с такой заразой, которая приводила к Access violation в только что откомпилированно Delphi программе.
oleg kutkov вне форума Ответить с цитированием
Старый 01.08.2009, 18:14   #10
Lavisa
Пользователь
 
Регистрация: 28.12.2008
Сообщений: 28
По умолчанию

Как это сделать? кода много. Похоже, я переезжаю в вижал студио. Devcpp
странен. Друг тоже сказал, что творится фигня: в дебагере все повисло и devcpp в это время жрал 50 % производительности процессора. Такое бывает редко, но похоже дело в редакторе и компиляторе. Вирус завестись мог, пару раз при написании маленькой прожки, комп сообщал мне, что моя прожка - троян. Я проверяла Devcpp и проект нортоном - нортон ниче не обнаружил. Короче, сейчас буду вижал студио ставить. У друга в гостях в вижал вроде все работало.
Lavisa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка сегментации при вызове system("PAUSE") Lavisa Помощь студентам 0 29.07.2009 17:43
1>Проект : error PRJ0003 : Ошибка при создании "cl.exe". ben95 Помощь студентам 1 14.05.2009 17:10
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder AleksP C++ Builder 7 11.04.2009 13:06
Подскажите кто-нибудь в чем отличие между system("pause"); и getch(); какую лучше использовать? Paul_AG Общие вопросы C/C++ 7 24.03.2009 19:32
Ошибка при установке "critical errors were found in setup" tsergey Софт 1 13.03.2009 03:58