/
Forside
/
Teknologi
/
Udvikling
/
C/C++
/
Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn
*
Kodeord
*
Husk mig
Brugerservice
Kom godt i gang
Bliv medlem
Seneste indlæg
Find en bruger
Stil et spørgsmål
Skriv et tip
Fortæl en ven
Pointsystemet
Kontakt Kandu.dk
Emnevisning
Kategorier
Alfabetisk
Karriere
Interesser
Teknologi
Reklame
Top 10 brugere
C/C++
#
Navn
Point
1
BertelBra..
2425
2
pmbruun
695
3
Master_of..
501
4
jdjespers..
500
5
kyllekylle
500
6
Bech_bb
500
7
scootergr..
300
8
gibson
300
9
molokyle
287
10
strarup
270
underlig segfault, men ikke i ddd
Fra :
gunter
Dato :
12-12-03 15:13
Hvorfor segfault flg. program??
Hvis jeg kører det gennem ddd og indsætter breakpoint lige inden return
i main() og derefter trykker continue er der ingen segfault. Hvis intet
breakpoint eksisterer segfaulter det også i ddd.
#include <stdio.h>
int is_ws(char test);
void main() {
char *blok=" bla";
int i;
int j=0;
printf("START\n");
for (i=0; blok[i]!='\0'; i++) {
if (is_ws(blok[i])==1){
}
else {
blok[j++]=blok[i];
}
// lastseen=blok[i];
}
blok[j]='\0';
printf("%s\n", blok);
return;
}
int is_ws(char test) {
if (test==' '||test=='\n'||test=='\t'||test=='\r')
return 1;
return 0;
}
gunter (
12-12-2003
)
Kommentar
Fra :
gunter
Dato :
12-12-03 15:17
Jeg kan lige tilføje at det er i nedenstående linje der er segfault
blok[j++]=blok[i];
Michael Sig Birkmose (
12-12-2003
)
Kommentar
Fra :
Michael Sig Birkmose
Dato :
12-12-03 17:04
Bertel Brander (
13-12-2003
)
Kommentar
Fra :
Bertel Brander
Dato :
13-12-03 00:16
Michael Sig Birkmose wrote:
>> char *blok=" bla";
>
> (snip)
>
>> blok[j++]=blok[i];
>
>
> her proever du vist at skrive til noget der er allokeret som en const char
> *?
>
Skal man være pedantisk så er " bla" en string literal, ikke en
const char *
I C99 står der om string literal's (6.4.5):
"If the program attempts to modify such an array,
the behavior is undefined."
/b
Byrial Jensen (
12-12-2003
)
Kommentar
Fra :
Byrial Jensen
Dato :
12-12-03 19:12
gunter wrote:
> Hvorfor segfault flg. program??
>
> #include <stdio.h>
> int is_ws(char test);
>
> void main() {
Det kunne være på grund af forkert definition af main() som skal
returnere int. Det giver udefineret adfærd.
> char *blok=" bla";
>
> int i;
> int j=0;
> printf("START\n");
> for (i=0; blok[i]!='\0'; i++) {
> if (is_ws(blok[i])==1){
> }
> else {
> blok[j++]=blok[i];
Det kunne også (og nok mere sandsynligt) være på grund af forsøg på at
ændre en streng konstant. Det giver også udefineret adfærd.
> }
> // lastseen=blok[i];
> }
> blok[j]='\0';
> printf("%s\n", blok);
> return;
> }
Søg
Alle emner
Teknologi
Udvikling
C/C++
Indstillinger
Spørgsmål
Tips
Usenet
Reklame
Statistik
Spørgsmål :
177580
Tips :
31968
Nyheder :
719565
Indlæg :
6409081
Brugere :
218888
Månedens bedste
Årets bedste
Sidste års bedste
Copyright © 2000-2024 kandu.dk. Alle rettigheder forbeholdes.