LINUX.ORG.RU

Помогите разобраться(C++)


0

0

Прога вылетает с ошибкой сегментации.

Диагноз GDB:

Program received signal SIGSEGV, Segmentation fault.

0x0804889e in CReadFile::parse_string() ()

(gdb) bt

#0 0x0804889e in CReadFile::parse_string() ()

#1 0x08048bf8 in CReadFile::start() ()

#2 0x08048a37 in main ()

#3 0x42015574 in __libc_start_main () from /lib/tls/libc.so.6

(gdb) quit

кусок кода :

....... private:

str[1000];

public:

parse_str[10[200];

.......... int CReadFile::parse_string()//function is complete { if(str_status==0)return 0; int num_char,num_parse_char,mass_num; num_char,num_parse_char,mass_num=0; for(mass_num=0;mass_num<10;mass_num++) //////////////////////////////////////////////////////////////////// { ////// Set zero into massif parse_string memset(parse_str[mass_num],0,sizeof(parse_str[mass_num])); ////// } //////////////////////////////////////////////////////////////////////////////// //////////////////// mass_num=0; while(1) { if(str[num_char]=='\0') // if end of string... . { parse_str[mass_num][num_parse_char]=str[num_char]; memset(str,0,sizeof(str)); break; } if(str[num_char]==' ') // if space ... . { if(mass_num>10) { return 1; } mass_num++; num_parse_char=0; while(str[num_char]==' ') { num_char++; } } parse_str[mass_num][num_parse_char]=str[num_char]; // add symbol into parse_str num_char++; num_parse_char++; } return 0; };

.........

anonymous

1. А отформатировать слабО?
2. num_char,num_parse_char,mass_num=0; Это что за хуйня? Попробуй написать тестовую программку, в которой выполняется такая строчка и выводится результат. В итоге, num_char и num_parse_char не инициализированы.
3. for(mass_num=0;mass_num<10;mass_num++)... К этому сильно придираться не буду, хотя весь цикл можно бы заменить на один memset.
4. if(mass_num>10) ...; mass_num++; поменять местами с if и условие записать if(mass_num>=10).
5. Везде отсутствуют (или неправильно написаны) проверки на выход за границу диапазона индексов.
6. Если строка завершается пробелом и _одним_ символом '\x00', то будет пиздец.
7. Учите матчасть. man strtok, man strtok_r.

Rock
()
Ответ на: комментарий от Rock

Блин я и не думал что будет СТОЛЬКО багов.

Спасибо за критику.

Пошел учить... .

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.