![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| xreal |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 25.12.2009 Репутация: нет Всего: нет |
Здравствуйте, возникли некоторые проблемки. Это часть программы, компилируется хорошо, но после запуска аварийно завершается. Хотелось бы уточнить кое-что по функциям. Вопросы буду писать в комментариях.
Заранее спасибо. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
1. Ты присваиваешь результат strtok переменной mas[i], а проверяешь ololo. i увеличивается до тех пор, пока ты не забьешь все переменные между массивом и ololo нулями. Т.е. если ты воткнешь еще одну переменную между ними, будет 52.
2. у тебя массив на 50 элементов. Если у тебя i больше 50, то ты выходишь за границу массива со всеми вытекающими |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
может так нужно
а то у тебя 50 указателей mas на ничего, ты их даже не проинициализировал ( не выделил память) -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| xreal |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 25.12.2009 Репутация: нет Всего: нет |
1. А как сделать, чтобы массив забивался только пока есть слова?
2. Там выбрасывает не на 50+ там и на первом проходе цикла при j=0 выбрасывает |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
xreal, исправь первую ошибку, исправится и вторая.
|
|||
|
||||
| xreal |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 25.12.2009 Репутация: нет Всего: нет |
Сделал, как посоветовали, но как-то всё равно не работает.
Это сообщение отредактировал(а) xreal - 21.6.2010, 11:45 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Кстати, считанные из файла данные нужно терминировать нулем. Иначе strtok может перелопатить всю память ПОСЛЕ образа, считанного из файла, в поисках конца строки (символа с нулевым кодом)
|
|||
|
||||
| xreal |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 25.12.2009 Репутация: нет Всего: нет |
А варианты решения основной проблемы есть?
|
|||
|
||||
| neondartal |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 25.11.2009 Репутация: нет Всего: нет |
myf=(char*)(malloc(filesize))
так будет без глюков myf=(char*)(malloc(filesize+1)) myf[filesize] = '\0' Это сообщение отредактировал(а) neondartal - 21.6.2010, 18:41 |
|||
|
||||
| neondartal |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 25.11.2009 Репутация: нет Всего: нет |
fopen - есть а fclose ??? Ведь при глюке он может быть еще открыт - обязательно надо закрывать все открытые файлы. И пропиши - точный путь к файлу.
|
|||
|
||||
| xreal |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 25.12.2009 Репутация: нет Всего: нет |
я не могу понять почему мне такое дебаггер выдаёт, это на fopen fclose написан, просто ниже по коду был. Это сообщение отредактировал(а) xreal - 21.6.2010, 19:08 |
|||
|
||||
| neondartal |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 25.11.2009 Репутация: нет Всего: нет |
А что если файл пока не использовать - отработай все на массиве в памяти, потом просто в массив загоняй файл. А то непонятно - что у тебя - вообще работает, или вообще ни разу - не работало.
Тут только один вариант - файл не может найти, пропиши точный путь, если типа c:/file.txt или "c:\\file.txt" не помню слэши надо или нет двойные. Добавлено через 5 минут и 13 секунд Вот пример из Help - запусти и проверь - тут на два файла пример. int main( void ) { int numclosed; // Open for read (will fail if file "crt_fopen.c" does not exist) if( (stream = fopen( "crt_fopen.c", "r" )) == NULL ) // C4996 // Note: fopen is deprecated; consider using fopen_s instead printf( "The file 'crt_fopen.c' was not opened\n" ); else printf( "The file 'crt_fopen.c' was opened\n" ); // Open for write if( (stream2 = fopen( "data2", "w+" )) == NULL ) // C4996 printf( "The file 'data2' was not opened\n" ); else printf( "The file 'data2' was opened\n" ); // Close stream if it is not NULL if( stream) { if ( fclose( stream ) ) { printf( "The file 'crt_fopen.c' was not closed\n" ); } } // All other files are closed: numclosed = _fcloseall( ); printf( "Number of files closed by _fcloseall: %u\n", numclosed ); return 0; } Это сообщение отредактировал(а) neondartal - 21.6.2010, 19:16 |
|||
|
||||
| xreal |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 25.12.2009 Репутация: нет Всего: нет |
Вообще-то изначально всё работало, и был вопросы только те, что вначале. Так что бред какой-то. Спасибо всем за помощь.
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
| xreal |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 25.12.2009 Репутация: нет Всего: нет |
Спасибо.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |