Pytanie o poprawnosc przydzielania pamieci i zwracania wartosci w funkcji
Ostatnio zmodyfikowano 2011-11-05 16:07
Savail Temat założony przez niniejszego użytkownika |
Pytanie o poprawnosc przydzielania pamieci i zwracania wartosci w funkcji » 2011-11-05 15:10:14 Hej, Juz od jakiegos czasu probuje stworzyc funkcje ktora w podanym C stringu line wyszuka wszystko pomiedzy znakami begin i end oraz zapisze to do C stringa found i zwroci go... Niestety podczas trzeciego wykonania funkcji w moim programie wystepuje blad. I na dodatek wystepuje on tylko w release, gdy debuguje program to wszystko jest ok. Juz od godziny nie moge znalezc bledu i bylbym ogromnie wdzieczny za sprawdzenie funkcji char * find( const char * line, int line_length, char begin, char end ) { char * found = NULL; bool exist = false; for( int i = 0; i < line_length; i++ ) { if( line[ i ] == begin ) { int k = i + 1; while( line[ k ] != end && k < line_length ) { found = new char; found[ k -( i + 1 ) ] = line[ k ]; k++; } exist = true; break; } } if( exist ) return found; else return "false"; } |
|
Savail Temat założony przez niniejszego użytkownika |
» 2011-11-05 16:02:22 Dobra, udało mi sie znaleźć poprawne rozwiązanie: char * find( const char * line, int line_length, char begin, char end ) { char * old_data; char * new_data; for( int i = 0; i < line_length; i++ ) { if( line[ i ] == begin ) { int k = i + 1; old_data = new char[ line_length - i ]; while( line[ k ] != end && k < line_length ) { old_data[ k -( i + 1 ) ] = line[ k ]; k++; } new_data = new char[ k - 1 ]; memcpy( new_data, old_data, k - 1 ); return new_data; } } return "false"; } Myślałem że po przez operację found = new char; po prostu co przejscie petli zwiekszam rozmiar tablicy found o 1... Co tak naprawde powoduje ta operacja? przydzielanie found co przejscie petli rozmiar rowny 1, czy co przejscie petli zwiekszanie rozmiaru o 1? |
|
m4tx |
» 2011-11-05 16:07:07 found = new char; To nie tworzy tablicy o 1 większej... To tworzy 1 zmienną typu char, czyli przechowującą 1 znak... :P |
|
« 1 » |