Kezdőoldal » Számítástechnika » Programozás » Nem értem mi a pobléma?...

Nem értem mi a pobléma? Segmentation fault, házi feladat

Figyelt kérdés

main-t nem lehet módosítani, csak az strReverse függvényt. Igazából csak a nullpointer elleni védelmet raktam bele de nem műkődik.


A main() függvényt a tanár adta, az amúgy is csak a teszteket tartalmazza. A feladatot pedig a következő meg kell fordítani a kapott stringet, tehát a betűk a végéről az elejére kerülnek és fordítva.


eredeti feladat:

/**

strReverse

reverse the given string

\ingroup strings

\param str string to reverse str can be NULL

\return the new reversed string

Caller must free the copy

*/


#include <stdio.h>

#include <stdlib.h>

#include <assert.h>



char *strReverse(const char *str);


int main()

{

char empty[]="",

beginSpace[]=" asdf",

endingSpace[]="asdf ",

middleOfSpace[]="as df",

beginTab[]="\tasdf",

endingTab[]="asdf\t",

middleOfTab[]="as\tdf",

alphaNumeric[]="asd234f1",

onlyNumeric[]="432432",

onlyAlpha[]="asdgjh",

loop[]="asdfg423ASDFG423asdfg423ASDFG423asdfg",

upperCase[]="VALAMI",

mixedCase1[]="VALAMI es valami";


printf("testStrReverse started...");

assert(strReverse(NULL)==NULL);

assert(strReverse(empty)==NULL);

assert(strcmp(strReverse(beginSpace), "fdsa ")==0);

assert(strcmp(strReverse(endingSpace), " fdsa")==0);

assert(strcmp(strReverse(middleOfSpace), "fd sa")==0);

assert(strcmp(strReverse(beginTab), "fdsa\t")==0);

assert(strcmp(strReverse(endingTab), "\tfdsa")==0);

assert(strcmp(strReverse(middleOfTab), "fd\tsa")==0);

assert(strcmp(strReverse(alphaNumeric), "1f432dsa")==0);

assert(strcmp(strReverse(onlyNumeric), "234234")==0);

assert(strcmp(strReverse(onlyAlpha), "hjgdsa")==0);

assert(strcmp(strReverse(upperCase), "IMALAV")==0);

assert(strcmp(strReverse(mixedCase1), "imalav se IMALAV")==0);

assert(strcmp(strReverse(loop), "gfdsa324GFDSA324gfdsa324GFDSA324gfdsa")==0);

printf("passed\n");

return 0;

}


/**

strReverse

reverse the given string

\ingroup strings

\param str string to reverse str can be NULL

\return the new reversed string

Caller must free the copy

*/

char *strReverse(const char *str){

if(!str || !*str) return NULL;

getchar();

return NULL;

}



2013. okt. 6. 03:05
 1/6 iostream ***** válasza:
Feltétel nélkül visszatérsz 0-val, ő pedig ráhívja az strcmp-t az eredményre. Szerinted mi okoz segfaultot?
2013. okt. 6. 10:35
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:
ha return 0-át írok akkor is Segmentation faultot ad ki.
2013. okt. 6. 17:06
 3/6 A kérdező kommentje:

le kéne futnia az első tesztnek, ami ez a sor

assert(strReverse(NULL)==NULL);


megkapja a nullpointert, és null pointert is vár vissza, nos, porgram minden esetben null pointert ad vissza.


Gúnyolódás nélkül is lehet válaszolni.

2013. okt. 6. 17:08
 4/6 A kérdező kommentje:

assert(strReverse(NULL)==NULL);


strReverse függvény megkapja a NULL pointert, ami rögtön az első viszgálaton fent akad "if(!str || !*str) return NULL;", tehát return NULL, azaz vissza is tér vele. A zárójelen belül összehasonlításra kellene kerülnie a két értéknek, de nem értem hogy NULL miért nem egyenlő NULL-al.

2013. okt. 6. 17:12
 5/6 A kérdező kommentje:
Mellesleg nem is 0-ával tértem vissza, így nem is az okozhatja a segmentation fault-ot
2013. okt. 6. 17:14
 6/6 iostream ***** válasza:
A 0 és a NULL ilyen szempontból ugyanaz. Azt pofázom, hogy az első strcmp-s sor el fog segfaultolni, mert 0-t ad neki oda. Miből gondolod, hogy az első assert sem fut le sikerrel?
2013. okt. 6. 17:16
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!