🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #12868

Re: Segmentation Fault

#12868
From: Philip Van Hoof
Date: Sat, 29 Sep 2001 12:14
74 lines
3555 bytes
Karel wrote:

> [14:50:47][karel@fdreactor:~/test]$ ./code Geef getal: 23 Het ingevoerde
> getal is 23
> Geef tweede getal: 11
> Segmentation fault
> [14:50:52][karel@fdreactor:~/testcode]$

Je alloceert geen geheugen voor je string1 en string2 welke niet
letterlijk strings zijn maar pointers naar een geheugen plek (daar waar je
er zal alloceren. Gebruik hiervoor malloc).

Segmentation fault komt (in dit geval) door de kernel die merkt dat jouw
process op een geheugen plek gaat schrijven die niet van hemzelf is.  ->
En da mag nie van grote me'neer de kernel :)..wij programmeurs moeten ons
klein manne (ons code) dus maar tegoei opleiden of "kernel" killed ze
iedere keer ze iets verkeerd doen :-\ .. altans in echte operating systems
toch (linux, *BSD, *NIX) .. in Windhoos doen uw processen meestal wat ze
willen heb ik precies gemerkt toen ik er vroeger in programmeerde...

Een betere methode zou zijn :


#include <stdio.h>
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;

#define MAXLEN 20

int main(int argc, char **argv) {
	char s1[MAXLEN], s2[MAXLEN];
	fgets(s1, sizeof(s1), stdin);
	 if (strlen(s1)<=0) exit(1);
	s1[strlen(s1)-1] = '\0';

	fgets(s2, sizeof(s2), stdin);
	 if (strlen(s2)<=0) exit(1);
	s1[strlen(s2)-1] = '\0';

	printf("Eerste gegeven was : %s\nTweede gegeven was: %s",s1,s2); return
	0;
}


Why how wa?:
----------
fgets(s1, sizeof(s1), stdin);
	-> inlezen

 if (strlen(s1)<=0) exit(1);
	->  nakijken of de string <= 0 (anders kan de
		volgende instructie een security fout zijn : die zal op de verkeerde
		plek in het geheugen dan iets op '\0' zetten (en da wil je niet laten
		gebeuren)!

s1[strlen(s1)-1] = '\0';
	-> Het laatste karakter terminaten
	-> Bij fgets() is dit laatste karakter '\n'
	      Sommige talen voorzien hiervoor
	      een chop() functie (perl bijvoorbeeld)

ps. Voor simpele programmatjes waar snelheid niet echt belangrijk is. Is
het nuttig om een minder programmeur-belastende taal zoals bijvoorbeeld
perl te gebruiken. Daar moet je niet nadenken over het geheugen beheer
van je eigen applicatie en dus kan de ontwikkeling veel sneller en
vlotter gebeuren. Echter is performance, snelheid en het gebrek aan een
perl interpreter op de gebruiker zijn systeem van belang .. kan het toch
beter zijn in C te werken...


-- 
Philip van Hoof aka freax (http://www.freax.eu.org)
irc: irc.openprojects.net mailto:freax @ pandora.be
Technical Details
Message-ID: <pan.2001.09.29.14.09.36.334.11421@pandora.be>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!193.190.198.17!newsfeeds.belnet.be!news.belnet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
References: <ofks7.72306$6x5.15824854@afrodite.telenet-ops.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,235d965c7bd3acb4
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2001-09-29 05:14:37 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!193.190.198.17!newsfeeds.belnet.be!news.belnet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
From: "Philip Van Hoof" <freax@pandora.be>
Subject: Re: Segmentation Fault
Newsgroups: be.comp.programming
Message-ID: <pan.2001.09.29.14.09.36.334.11421@pandora.be>
References: <ofks7.72306$6x5.15824854@afrodite.telenet-ops.be>
User-Agent: Pan/0.10.0 (Unix)
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
X-Comment-To: "Karel" <karel@fd.com>
Lines: 74
Date: Sat, 29 Sep 2001 12:14:25 GMT
NNTP-Posting-Host: 213.224.139.220
X-Complaints-To: abuse@pandora.be
X-Trace: afrodite.telenet-ops.be 1001765665 213.224.139.220 (Sat, 29 Sep 2001 14:14:25 MET DST)
NNTP-Posting-Date: Sat, 29 Sep 2001 14:14:25 MET DST
Organization: Telenet Internet