PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [c] problem ich komm nicht drauf



quinte17
09-09-2004, 13:19
habe folgende funktion:


struct ptab *searchcmd(char *cmd)
{
struct ptab *wrk;
char *conv;
int cnt;
char test;
conv=cmd;
printf("\nNAECHSTE ZEILE MACHT ALLES KAPUTT!\n");
printf("'");
for (cnt=0;cnt<strlen(cmd);cnt++)
{
printf("%c",*conv); // output: r
#ifdef __unix__
*conv = toupper(*conv);
#elif __WIN32__ || _MSC_VER
*conv = toupper(*conv); // SEGFAULT
printf("%c",*conv); // output theoretisch: R
#endif
conv++;
}
printf("'");
wrk=pcodes;
while (*(wrk->command)!= '\0')
{
if ((strcmp(wrk->command,cmd))==0)
{
return(wrk);
}
cnt++;
wrk++;
}
return(NULL);
}


diese wird wie folgt aufgerufen:


searchcmd("reset");


in der funktion habe ich einen pointer fett markiert.

wenn ich das programm starte läuft es bis zu dieser fettmarkierten stelle, wo ich dann einen segmentation fault bekomme, weil der versucht etwas da in den pointer zu schreiben... wenn ich da eine testvariable vom typ int davor tu bekomm ich keinen segfault.

kann mir einer da vielleicht einen tip geben??

wäre relativ wichtig...
danke schonmal!

greetz

wraith
09-09-2004, 13:43
Die Zeichenkette "reset" liegt in einem Readonly-Speicherbereich.
Innerhalb deiner Schleife schreibst du aber (über den Pointer conv) in diesen Speicher, und das verursacht den SegFault.

Entweder du änderst deine Funktion ab, oder du mußt deiner Funktion die Zeichenkette anders übergeben.


...
char str[] ="reset";
searchcmd(str);

quinte17
09-09-2004, 14:14
thx! ;)
ich habe mir des scho gedacht, und hatte des auch scho ausprobiert, aba da gings dann trotzdem nicht... komisch... bei deiner lösung läuft des jetzt!

greetz