🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #14180

Re: Raar probleem in C

#14180
From: Luc Kumps
Date: Thu, 12 Apr 2001 07:02
80 lines
3528 bytes
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: <AqcB6.32951$ii5.3335444@afrodite.telenet-ops.be>
Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!news.tele.dk!193.190.198.17!newsfeeds.belnet.be!news.belnet.be!afrodite.telenet-ops.be!not-for-mail
References: <5h49dt44qracr24j8od92i6nb41g4nhu76@4ax.com>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,5b8f6d4a879dd9fb,start
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2001-04-12 00:04:58 PST
Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!supernews.com!news.tele.dk!193.190.198.17!newsfeeds.belnet.be!news.belnet.be!afrodite.telenet-ops.be!not-for-mail
From: "Luc Kumps" <NOkumpsSPAM@pandora.be>
Newsgroups: be.comp.programming
References: <5h49dt44qracr24j8od92i6nb41g4nhu76@4ax.com>
Subject: Re: Raar probleem in C
Lines: 82
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.50.4133.2400
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400
Message-ID: <AqcB6.32951$ii5.3335444@afrodite.telenet-ops.be>
Date: Thu, 12 Apr 2001 07:02:56 GMT
NNTP-Posting-Host: 213.118.64.224
X-Complaints-To: abuse@pandora.be
X-Trace: afrodite.telenet-ops.be 987058976 213.118.64.224 (Thu, 12 Apr 2001 09:02:56 MET DST)
NNTP-Posting-Date: Thu, 12 Apr 2001 09:02:56 MET DST
Organization: Telenet Internet