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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2009, 09:47   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Только print_error отработает, а прога дальше на выполнение пойдет в любом случае и что будет в argv[2] никто не знает
Дык я об этом и говрорю. (наверное нужно было поточнее мыслю выразить)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.07.2009, 09:55   #12
Lavisa
Пользователь
 
Регистрация: 28.12.2008
Сообщений: 28
По умолчанию

print_error() - распечатка ошибок, которая должна завершаться командой exit(0); Пока прога валится и при условии, что ошибок не было и их распечатывать не пришлось.

хотя и на наличие-отсутствие параметров я ее до начала багов тестила - и все было хорошо.

Последний раз редактировалось Sazary; 31.07.2009 в 15:57.
Lavisa вне форума Ответить с цитированием
Старый 31.07.2009, 10:06   #13
Lavisa
Пользователь
 
Регистрация: 28.12.2008
Сообщений: 28
По умолчанию

Код:
if ( *argv[1]== 'C' ) // Если первый параметр равен 'С', и чтение строк полной и краткой форм // происходит из командной строки {
if ( argc < NUMPARAM + 2 ) // Если параметров меньше NUMPARAM
print_error( MAIN_SECSTRPARAM_ERR ); // If argument string is empty
res_id = k_trans_data(
argv[7], argv[8], &sf_struct_list, &ff_struct_list
); // Разбиение строк краткой и полной форм на список частей с // дополнительной информацией о каждой
} else if ( *argv[1] == 'F' ) // Если первый параметр равен 'F', и чтение строк полной и краткой форм // происходит из файла {
file_ptr_r = fopen( argv[7], "r" ); // Открытие файла для чтения списка кратких и полных форм if( file_ptr_r == 0 ) {
print_error( MAIN_FILE_OPEN_ERR ); return 0;
} str_sf = ( char* )malloc( STRBUF ); // Выделение памяти для одной из считанных строк if ( str_sf == NULL )
print_error( MAIN_MEM_ERR );
str_ff = ( char* )malloc( STRBUF ); // Выделение памяти для второй из считанных строк if ( str_ff == NULL )
print_error( MAIN_MEM_ERR );
str_dil = ( char* )malloc( STRBUF ); // Выделение памяти для строки разделителей if ( str_dil == NULL )
print_error( MAIN_MEM_ERR );
while (
( fscanf( file_ptr_r, "%[^,]", str_sf ) != EOF )&& // Чтение из файла первой строки до запятой ( fscanf( file_ptr_r, "%[,]", str_dil ) != EOF )&& // Чтение запятой ( fscanf( file_ptr_r, "%[^\n]", str_ff ) != EOF ) // Чтение из файла второй строки до знака перевода строки
) {
printf( "Short form: %s\nFull form: %s\n", str_sf, str_ff ); // Вывести на экран считанные строки res_id = k_trans_data( str_sf, str_ff, &sf_struct_list, &ff_struct_list ); // Разбиение строк краткой и полной форм на список частей с // дополнительной информацией о каждой if ( res_id != OK )
print_error( MAIN_K_TRANS_DATA_ERR );
}
} else
print_error( MAIN_INPPARAM_ERR );
printf("Press any key continue\n"); getc(stdin); return 0;
}

Последний раз редактировалось Sazary; 31.07.2009 в 15:57.
Lavisa вне форума Ответить с цитированием
Старый 31.07.2009, 10:18   #14
Lavisa
Пользователь
 
Регистрация: 28.12.2008
Сообщений: 28
По умолчанию

Ксатити, я вспомнила, я exit в print_error заменила на return - так что это надо исправить. Но хотелось бы еще каких-то версий, так как прога пару раз падала и внутри print_error, не успев вернуться из нее, на строчке system("PAUSE"); или getc(stdin); а сейчас я ее запускаю с нормальным количеством параметров и она падает после выполнения команды return 0; в конце функции main, судя по брейкпоинтам. Это ее не вылечит. Сейчас в маршрутке еще раз посмотрю на память в других функциях.

Последний раз редактировалось Lavisa; 31.07.2009 в 10:24.
Lavisa вне форума Ответить с цитированием
Старый 31.07.2009, 10:54   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Тут тебя спасет только пошаговый отладчик...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.08.2009, 18:17   #16
Lavisa
Пользователь
 
Регистрация: 28.12.2008
Сообщений: 28
По умолчанию

меня спасет другой редактор и компилятор. Похоже на этот раз действительно виновата не я, а среда. Вирус, наверное. Уж слишком неадекватно все происходит.
Lavisa вне форума Ответить с цитированием
Старый 01.08.2009, 18:31   #17
rangerx
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 46
По умолчанию

ну, вирус вирусом, а вы уверенны, что вам хватает выделенной памяти(что такое STRBUF?)?
P.S. 4(или вроде того) вызова malloc и не одного free(или я не заметил?) не есть хорошо...
rangerx вне форума Ответить с цитированием
Старый 01.08.2009, 18:45   #18
Lavisa
Пользователь
 
Регистрация: 28.12.2008
Сообщений: 28
По умолчанию

Хм. STRBUF - это 256 байт - вроде бы не так много. Даже если он штук 10 таких выделит. Но освобождать надо - это правда.
Lavisa вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
По каким причинам антивирусы палят не вирусы?? Вавел из ГМТУ Свободное общение 14 01.07.2009 12:45
Вылетает ошибка jon_free Операционные системы общие вопросы 3 29.06.2009 23:30
Прога вылетает Fi11eR Паскаль, Turbo Pascal, PascalABC.NET 4 18.06.2009 19:56
Еще одна проблема с непонятным файлом в реестре DeKot Безопасность, Шифрование 10 08.06.2009 00:04
вылетает ошибка! Алёна Общие вопросы Delphi 20 17.05.2007 06:57