Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pytanie o poprawnosc przydzielania pamieci i zwracania wartosci w funkcji

Ostatnio zmodyfikowano 2011-11-05 16:07
Autor Wiadomość
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
C/C++
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";
   
}
P-43359
Savail
Temat założony przez niniejszego użytkownika
» 2011-11-05 16:02:22
Dobra, udało mi sie znaleźć poprawne rozwiązanie:
C/C++
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?
P-43362
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
P-43363
« 1 »
  Strona 1 z 1