Article View: be.comp.programming
Article #14181Re: Raar probleem in C
From: Reinaert Albrecht
Date: Thu, 12 Apr 2001 10:07
Date: Thu, 12 Apr 2001 10:07
97 lines
3907 bytes
3907 bytes
Waar en van wie krijgt die les?
On Thu, 12 Apr 2001 07:02:56 GMT
"Luc Kumps" <NOkumpsSPAM@pandora.be> wrote:
> Ik vermoed _sterk_ dat je "prof" over niet erg veel ervaring op
> computers
> beschikt ;-)
>
> In je programma geef je een constante string ("Kevin") door aan de
> draaiom
> routine.
> De compiler die je gebruikt is zo verstandig om constante string te
> beschermen tegen wijziging, door het geheugen waarin die string zit
> "read-only" te maken.
>
> Dit is belangrijk omdat:
> 1. Men kan verwachten dat constante strings constant, dus ongewijzigd
> blijven.
> 2. In de compiler "constant string pooling" supporteert dan is het des
> te
> belangrijk dat de string niet wijzigen. Een voorbeeld:
>
> draaiom("Kevin");
> printf("%s\n", "Kevin");
>
> Bij "string pooling" wordt de constante string "Kevin" slechts 1 maal
>
opgeslagen. Het resultaat van bovenstaand programma zou zijn dat de
> printf
> lijn "neviK" toont!
> In Visual C++ kun je string pooling aanzetten met "/Gf". In dat geval
> zal
> bonvenstaand programma tweemaal "neviK" tonen. Indien je "/GF" gebruikt,
> zal
> er een runtime error optreden zoals jij beschrijft. Indien je niets
> opgeeft,
> dan wordt er 1 maal "neviK" en 1 maal "Kevin" getoond, omdat de twee
> constante string aparte geheugenlocaties innemen...
>
> Indien je de "/ZI" flag gebruikt (en die wordt automatisch gebruikt in
> de
> default "Debug" settings), dan heb je automatisch "/GF".
>
> Een paar KB articles behandelen deze problemen:
>
> http://support.microsoft.com/support/kb/articles/Q198/4/77.ASP
> http://support.microsoft.com/support/kb/articles/Q199/2/90.ASP
>
> Groetjes,
>
> Luc
>
> "Spiri" <spiri@pandora.be> wrote in message
> news:5h49dt44qracr24j8od92i6nb41g4nhu76@4ax.com...
> > Ik heb het onderstaand programmatje geschreven in C. Als ik het nu
> > compileer in Visual C++, dan krijg ik een runtime error tijdens het
> > uitvoeren (cannot write to memory)
> > De fout blijkt te liggen aan het doorgeven van een string als
> > argument. Ik, en ook mijn prof, snappen niet waar het aan kan liggen.
> > We hebben het probleem wel op een andere manier opgelost gekregen,
> > maar we snappen niet waarom dit niet werkt. Het is immers syntactisch
> > gezien volledig juist.
> >
> > //draaiom.c
> > #include <stdio.h>
> > #include <string.h>
> >
> > void draaiom( char s[] );
> >
> > main()
> > {
> > draaiom("Kevin");
> > }
> >
> > //functie om de string om te draaien, mbv hulp-var c, en nadien te
> > //plotten
> > void draaiom( char s[] )
> > {
> > char c;
> >
> > int lengte = strlen(s), i, j;
> >
> > for( i = 0, j = strlen(s) - 1; i < j; i++, j-- )
> > {
> > c = s[i];
> > s[i] = s[j];
> > s[j] = c;
> > }
> >
> > printf("%s\n", s);
> > }
> >
> >
>
>
Technical Details
Message-ID:
<20010412120747.2fbe3b34.reinaert.albrecht@spam.wol.be>Path:
arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!news.tele.dk!134.222.94.5!npeer.kpnqwest.net!news.worldonline.be!not-for-mailReferences:
<5h49dt44qracr24j8od92i6nb41g4nhu76@4ax.com> <AqcB6.32951$ii5.3335444@afrodite.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,5b8f6d4a879dd9fb X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2001-04-12 03:11:14 PST Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!news.tele.dk!134.222.94.5!npeer.kpnqwest.net!news.worldonline.be!not-for-mail From: Reinaert Albrecht <reinaert.albrecht@spam.wol.be> Newsgroups: be.comp.programming Subject: Re: Raar probleem in C Date: Thu, 12 Apr 2001 12:07:47 +0200 Organization: Worldonline Belgium Lines: 97 Message-ID: <20010412120747.2fbe3b34.reinaert.albrecht@spam.wol.be> References: <5h49dt44qracr24j8od92i6nb41g4nhu76@4ax.com> <AqcB6.32951$ii5.3335444@afrodite.telenet-ops.be> NNTP-Posting-Host: dp44-49.worldonline.be Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Trace: news.worldonline.be 987069987 29590 212.233.44.49 (12 Apr 2001 10:06:27 GMT) X-Complaints-To: abuse@worldonline.be NNTP-Posting-Date: Thu, 12 Apr 2001 10:06:27 +0000 (UTC) X-Newsreader: Sylpheed version 0.4.63 (GTK+ 1.2.8; i686-pc-linux-gnu)