2016-04-25 4 views
-2

Haftungsausschluss: Dies ist für eine Hausaufgabe, aber die Frage, die gestellt wird, hat nichts mit der tatsächlichen Aufgabe zu tun.Warum wird ein Zeigerwert nach der Rückgabe geändert?

Ich muss einen einfachen Speicher-Manager für eine meiner Klassen implementieren, in der Funktion my_malloc kurz vor der Rückkehr von der Funktion der Wert, der zurückgegeben wird (z. B. 0x7fb0049ed410) und in der aufrufenden Funktion ist es ein anderes (sagen wir: 0x49ed410).

my_malloc (unsigned int);

typedef void* Addr; 
Addr raddr = (Addr) (memoryHeader + sizeof(header))) 
printf("Giving Memory: %p : %p\n", addr, raddr); 
return raddr 

Aufruf der Funktion();

void* mem = my_malloc(10*sizeof(char)); 
printf("Calling Function: %p\n", mem); 

Es tut mir leid, wenn dies nicht hilfreich ist, aber ich dachte, das genug sein könnte, um das Problem über ohne Angabe alle 600 und etwas Zeile Code zu bekommen.

Warnung beginnen gegeben:

incompatible integer to pointer conversion assigning to 'void *' from 'int' 
+0

Was ist 'memoryHeader'? Ist es auf dem Stapel oder dem Haufen? Ich glaube nicht, dass Sie 600 Codezeilen benötigen, aber vielleicht sind 20 oder 30 Codezeilen, die das Problem reproduzieren können, notwendig, um das Problem zu beschreiben. –

+2

Es würde helfen, wenn das Problem reproduzierbar wäre. ein Kurzes, selbst enthaltenes, korrektes (kompilierbares) Beispiel würde helfen; http://sscce.org/ – antak

+1

[Wie man ein minimales, vollständiges und überprüfbares Beispiel erstellt] (http://stackoverflow.com/help/mcve) –

Antwort

1

Der Code ruft vermutlich die my_malloc() Funktion ist für die Funktion eine richtige Erklärung/Prototyp nicht gegeben ist, ist es so als int den zurückgegebenen Zeiger zu behandeln.

Platzieren Sie Folgendes vor dem Aufruf an my_malloc() (idealerweise sollte dies in einem Header sein, der von jedem Code enthalten ist, der die Funktion aufruft, sowie dem Code, der die Funktion definiert, um sicherzustellen, dass sie korrekt ist).

void* my_malloc(size_t size); 
+0

Ich habe das versucht und es hat nichts geändert. –

+1

Dann denke ich, dass Sie die Zeit finden müssen, ein Beispiel anstatt unvollständiger Schnipsel zu veröffentlichen. –

Verwandte Themen