PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C + pointer + malloc() = chaos


The_Invisible
2008-06-17, 19:21:35
keine ahnung ob ich da gerade voll nen bock schieße oder sonstwas, jedenfalls funktioniert es vorne und hinten nicht.

mal einen revelanten ausschnitt aus dem code:


struct whoisdata
{
char **data;
short status;
};

struct whoisdata get_whois_data(char *server, char *dom);

int main(void)
{
struct whoisdata tmp = { NULL, 0 };

...

tmp = get_whois_data(server, domain);
if(tmp.status == 0)
{
return EXIT_FAILURE;
}

printf("==%p", *tmp.data);

...
}

struct whoisdata get_whois_data(char *server, char *dom)
{
char *whoisdata = (char *) malloc(sizeof(char)*10240);
struct whoisdata data;

strcpy(whoisdata, "");

...

printf("==p=%p\n", whoisdata);

while(bytes > 0)
{
bytes = recv(s, buffer, sizeof(buffer) - 1, 0);
buffer[bytes] = '\0';
if(bytes > 0)
strncat(whoisdata, buffer, sizeof(buffer));
}

data.data = &whoisdata;

printf("==pp=%p\n", *data.data);

return data;
}


als ausgabe erhalte ich hier:

==p=00C12920
==pp=00C12920
==0017FA60


es sollte aber eigentlich immer auf die selbe adresse verwiesen werden, oder?

wenn ich da natürlich weiterarbeite erhalte ich speicherverletzungen vom feinsten, zu hilf bitte. :(

mfg

Trap
2008-06-17, 20:07:24
Ja, der Code ist Unsinn, du speicherst die Adresse einer lokalen (nur auf dem Stack vorhandenen) Variablen in deinem Struct.

The_Invisible
2008-06-17, 21:10:04
ah, ich trottel sehe jetzt erst das ich eine ** notation habe und keine *.

jetzt haut es hin :)

mfg