char *ptr = (char*)malloc(10);
if(NULL == ptr)
{
printf("\n Malloc failed \n");
return -1;
}
else if(argc == 1)
{
printf("\n Usage \n");
}
else
{
memset(ptr, 0, 10);
strncpy(ptr, argv[1], 9);
while(*ptr != 'z')
{
ptr++;
}
if(*ptr == 'z')
{
printf("\n String contains 'z'\n");
/* Do some more processing */
}
free(ptr);
}
In dem vorherigen Code, sagen wir, dass Argumente für das Programm ist: Mixx
, gibt das Programm einen Segmentierungsfehler.Größe des zugewiesenen Arbeitsspeichers zu einem Zeiger ändert sich, wenn der Zeiger
Und meine Frage ist:
Wenn ich dies tun in der while-Schleife:
ptr++;
bedeutet dies, dass die Größe des Speichers auf den Zeiger ptr zugeordnet ändert sich auch, und das ist, warum, wenn ich die freie nennen() Funktion stürzt ab.
Ich sehe dies nicht als eine schlechte Frage. (Gute Beschreibung und Code-Schnipsel). UV'd. – Bathsheba
Sie lesen über das Ende der Zeichenfolge hinaus, da Sie nicht nach dem '\ 0' suchen, während Sie sich in der' while' Schleife befinden. – Koshinae
Es sei denn, 'argv [1]' 'ein 'z'' enthält, ist das Verhalten nicht definiert ist * schon vor dem' free() '*. Folglich kann ein konformer Compiler das 'if (* ptr == 'z')' --check eliminieren, da es nicht falsch sein kann. – EOF