The SDL forums have moved to discourse.libsdl.org.
This is just a read-only archive of the previous forums, to keep old links working.


SDL Forum Index
SDL
Simple Directmedia Layer Forums
Re: [HELP] SDL Segmentation
Ivan
Guest

David Olofson <david <at> olofson.net> writes:

Quote:
fgets() writes a NUL byte *after* the last byte read, so this will
segfault if the file is longer than 254 bytes.

As a general rule when dealing with the string functions of the C
library: Be very careful with those NUL terminators and buffer size
limits...

//David Olofson - Programmer, Composer, Open Source Advocate


Quote:
Perhaps make sure (fin != NULL) after the fopen() call?

This doesn't look like an SDL bug.

--ryan.


Thanks David (and Ryan ^_^) for your help
(i konw that i'should use a dynamic assignment) but ...

if i comment (or delete) the SDL initialization,
my code don't goes in Segmentation;
if you try (even adding a printf("%d\n",mdl->vtx_num)
to see if "all" indeed works) it works .... :P

thanks in advance,

(i'm really really sorry for my english ....
i hope that you understand what i'm trying to say)

Ivan
Re: [HELP] SDL Segmentation
John Popplewell
Guest

On Sun, Jan 08, 2006 at 10:24:27PM +0000, Ivan wrote:
Quote:
David Olofson <david <at> olofson.net> writes:

Quote:
fgets() writes a NUL byte *after* the last byte read, so this will
segfault if the file is longer than 254 bytes.

As a general rule when dealing with the string functions of the C
library: Be very careful with those NUL terminators and buffer size
limits...

//David Olofson - Programmer, Composer, Open Source Advocate


Quote:
Perhaps make sure (fin != NULL) after the fopen() call?

This doesn't look like an SDL bug.

--ryan.


Thanks David (and Ryan ^_^) for your help
(i konw that i'should use a dynamic assignment) but ...

if i comment (or delete) the SDL initialization,
my code don't goes in Segmentation;
if you try (even adding a printf("%d\n",mdl->vtx_num)
to see if "all" indeed works) it works .... :P

thanks in advance,

(i'm really really sorry for my english ....
i hope that you understand what i'm trying to say)

Ivan

Hi Ivan,

You're overriding the C-Library function read() with an incompatible one
of your own!

Try changing it to read_model() or something,

Good Luck!
John Popplewell.
Re: [HELP] SDL Segmentation
David Olofson
Guest

On Sunday 08 January 2006 23:24, Ivan wrote:
Quote:
David Olofson <david <at> olofson.net> writes:

Quote:
fgets() writes a NUL byte *after* the last byte read, so this will
segfault if the file is longer than 254 bytes.

As a general rule when dealing with the string functions of the C
library: Be very careful with those NUL terminators and buffer
size
Quote:
Quote:
limits...

//David Olofson - Programmer, Composer, Open Source Advocate


Quote:
Perhaps make sure (fin != NULL) after the fopen() call?

This doesn't look like an SDL bug.

--ryan.


Thanks David (and Ryan ^_^) for your help
(i konw that i'should use a dynamic assignment) but ...

if i comment (or delete) the SDL initialization,
my code don't goes in Segmentation;
if you try (even adding a printf("%d\n",mdl->vtx_num)
to see if "all" indeed works) it works .... Razz

Coincidence. Two things happen when you init SDL:
1) Code changes and moves around, so things that slips
through otherwise doesn't, and vice versa.
2) SDL catches the segmentation fault, so it has
a chance of closing the display and stuff.
(Certain platforms will sometimes kill the
display, or worse, if an application dies
without closing it's fullscreen display...)

That is, when not initializing SDL, your code somehow manages to get
away with illegal memory accesses (ie they hit some unused memory
area, as opposed to hitting unmapped addresses) - or it would have
crashed anyway; it would just have been handled by the operating
system instead of SDL.

Try adding SDL_INIT_NOPARACHUTE to SDL_Init() to have a normal crasch
instead, or more interestingly, allow a debugger to trap the
segfault.


//David Olofson - Programmer, Composer, Open Source Advocate

.------- http://olofson.net - Games, SDL examples -------.
| http://zeespace.net - 2.5D rendering engine |
| http://audiality.org - Music/audio engine |
| http://eel.olofson.net - Real time scripting |
'-- http://www.reologica.se - Rheology instrumentation --'
Re: [HELP] SDL Segmentation
Ivan
Guest

Thanks to all of you ^_^,
Ryan,John,David.

I'm sorry for the stupid questions that i've asked ^_^,

I'm only a little n00b... hghghghgh,

anyway now i know where i was wrong, really really thanks ^_^

(i'm really really sorry for my english .... again)

Bye,

Ivan
Re: [HELP] SDL Segmentation
Ivan
Guest

Justin Coleman <jmcoleman <at> gmail.com> writes:

Quote:

Sorry to bring this back up, but I want to clarify this fgets bit...

On 1/8/06, David Olofson <david <at> olofson.net> wrote:
Quote:

(This is not SDL related, but anyway...)

On Sunday 08 January 2006 20:07, Ivan wrote:
[...]
Quote:
char string[255];
[...]
Quote:
while(fgets(string,255,fin)!=NULL){

fgets() writes a NUL byte *after* the last byte read, so this will
segfault if the file is longer than 254 bytes.

According to Borland (C++ Builder 6) docs, fgets will stop after
reading n-1 bytes, leaving room for its null terminator itself. It
wouldn't segfault if the line was longer than 254 bytes, it would just
stop reading at that point. Are there other compilers where this
behavior is different? I'm using fgets for some of the data I load,
and I can always just make a bigger buffer, but it'd be easier to do
it right the first time.

-Justin


anyway,
i was looking around for tutorial to read obj
files and i've seen that *, NeHe in a tutorial
use something like my function, maybe (as someone has advised)
the problem is the overriding of the function read().

*The link:
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=25

i'll try and i'll let you know

thanks again,

Ivan