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

Segmentation fault - operacje na char*

Ostatnio zmodyfikowano 2012-11-11 21:44
Autor Wiadomość
RazzorFlame
Temat założony przez niniejszego użytkownika
Segmentation fault - operacje na char*
» 2012-11-11 21:33:22
Otóż dużo razy PODOBNIE (ale nie tak samo!) robilem ale teraz juz chyba ze 3 godziny mecze sie nad tym. Chcialem sobie po prostu zrobić editboxa w SFML (tak wgle to robie całe GUI do gry) i teraz zajmuje sie czcionką. Wyskakuje mi w debuggerze Segmentation Fault a sam program sie zawiesza i wylacza. Czytałem że to oznacza że przekroczyłem rozmiar jakiejś tam zaalokowanej pamieci czy coś w tym stylu. Tutaj jest kod funkcji którą chce wyświetlać ciąg znaków (może przy okazji coś innego bede mógl poprawic):
C/C++
void FontDraw( BitmapFont & usedFont, char * data, int posX, int posY )
{
    int wPosX = posX;
    int wPosY = posY;
    bool isSpace1 = false;
    usedFont.font_sprite.SetSubRect( sf::IntRect( usedFont.Letters[ 0 ].bR.x, usedFont.Letters[ 0 ].bR.y, usedFont.Letters[ 0 ].bR.x + usedFont.Letters[ 0 ].bR.w, usedFont.Letters[ 0 ].bR.x + usedFont.Letters[ 0 ].bR.h ) );
    for( int i1 = 0; data[ i1 + 1 ] != '/0'; i1++ )
    {
        for( int i = 'a'; i < 'z'; i++ )
        {
            if( data[ i1 ] == i ) // <----- Na ta linie wskazuje debugger.
            {
                if( i != 32 ) usedFont.font_sprite.SetSubRect( sf::IntRect( usedFont.Letters[ i - 97 ].bR.x, usedFont.Letters[ i - 97 ].bR.y, usedFont.Letters[ i - 97 ].bR.x + usedFont.Letters[ i - 97 ].bR.w, usedFont.Letters[ i - 97 ].bR.x + usedFont.Letters[ i - 97 ].bR.h ) );
               
                if( i == 32 ) isSpace1 = true;
               
                break;
            }
        }
        usedFont.font_sprite.SetPosition( wPosX, wPosY );
        if( isSpace1 != true ) app.Draw( usedFont.font_sprite );
       
        wPosX += usedFont.Letters[ 0 ].bR.x + 2;
        isSpace1 = false;
    }
   
}
Troche jest już pozmieniany kod bo dlugo sie z tym bawilem.

Edit:
I tak jak widac w kodzie interesuja mnie tylko 26 liter alfabetu angielskiego.
PS.: Od zmiennej 'i' odejmuje 97 bo znak 'a' w ASCII jest właśnie pod tym numerem.
P-69027
DejaVu
» 2012-11-11 21:37:08
C/C++
for( int i1 = 0; data[ i1 + 1 ] != '/0'; i1++ )
zamień na:
C/C++
for( int i1 = 0; data[ i1 ] != 0; i1++ )
Jeżeli innych błędów nie ma w kodzie to ten problem powinieneś zażegnać.
P-69028
cyklopek11
» 2012-11-11 21:44:21
zmienna char o wartości null to:
C/C++
'\0'
a nie :
C/C++
'/0'
Jakbyś włączył wszystkie warningi w opcjach swojego środowiska, to by to kompilator wyłapał i Cię o tym poinformował.


warning: multi-character character constant
warning: overflow in implicit constant conversion
P-69029
« 1 »
  Strona 1 z 1