too much for a newbie

hi

i came across with a problem that i cannot possibly solve all alone at least for now.

the prob is

at some .h file
1
2
3
4
5
struct SpriteImage{
    Surface * surface;
    Rect offset;
    Uint8 alpha;
};


.h
SpriteImage * fge_CreateTextSpriteImage(std::string text, Renderer * renderer, Font * font, Color color);

.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
SpriteImage * fge_CreateTextSpriteImage(std::string text, Renderer * renderer, Font * font, Color color)
{
    SpriteImage * tmp;
    if(!renderer)
        fge_Logger("renderer can not be NULL");
    else
    {
        tmp->surface = fge_CreateTextSurface(text.c_str(), renderer, font, color);
        if(!tmp)
            fge_Logger("failed to create spriteimage");
    }
    return tmp;
}


when i used this function it gives me SIGSEGV error what is the problem why is that happening

output
Process terminated with status -1073741819 (0 minutes, 7 seconds)


debugger says
#0 00402F7E	fge_CreateTextSpriteImage(text=..., renderer=0x3d30c8, font=0x5f20048, color=...) 
#1 004039ED	SDL_main(argc=argc@entry=1, argv=argv@entry=0x3d0040)
#2 004046AC	console_main(argc=argc@entry=1, argv=argv@entry=0x3d0040) 
#3 00404845	WinMain@16(hInst=0x400000, hPrev=0x0, szCmdLine=0x4d2d7f "", sw=10) 
#4 0046DEBB	main () (??:??)


i dont know what to do here.

thx in advance to everyone
Last edited on
SISSEGV is Segmentation Fault.
You get a Segmentation Fault usually when you access memory that you should not.

And looking in your code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SpriteImage * fge_CreateTextSpriteImage(std::string text, Renderer * renderer, Font * font, Color color)
{
    SpriteImage * tmp;
    // where does this pointer point to?
    // it has garbage value because it is not initialized!

    if(!renderer)
        fge_Logger("renderer can not be NULL");
    else
    {
        tmp->surface = fge_CreateTextSurface(text.c_str(), renderer, font, color);
        if(!tmp)
            fge_Logger("failed to create spriteimage");
    }
    return tmp;
}


A pointer is a variable that holds a memory address.
You must ensure that it holds a valid memory address, by allocating memory with new.

SpriteImage *tmp = new SpriteImage;

Late on you must also delete to avoid memory leaks.
http://www.cplusplus.com/doc/tutorial/dynamic/

Edit: after reading your code again, are you sure you must use a SpriteImage pointer?
Can you not simply use a "plain" SpriteImage variable instead?

1
2
3
4
5
6
7
8
9
10
11
12
13
SpriteImage fge_CreateTextSpriteImage(std::string text, Renderer * renderer, Font * font, Color color)
{
    SpriteImage tmp;
    if(!renderer)
        fge_Logger("renderer can not be NULL");
    else
    {
        tmp.surface = fge_CreateTextSurface(text.c_str(), renderer, font, color);
//        if(!tmp)
//            fge_Logger("failed to create spriteimage");
    }
    return tmp;
}
Last edited on
wow thx hell a lot
well. im not sure but will check it if i need or not.

really i m still very bad with pointers. but think it will be better

EDIT: yes i want a pointer
Last edited on
Topic archived. No new replies allowed.