2016-04-25 2 views
-2

Отказ от ответственности: это для домашнего задания, но задаваемый вопрос не связан с фактическим назначением.Почему значение указателя изменяется после его возврата?

Я должен реализовать простой менеджер памяти для одного из моих классов, в функции my_malloc перед возвратом из функции возвращаемое значение является одним из них (скажем: 0x7fb0049ed410), а в вызывающей функции это другой (скажем: 0x49ed410).

my_malloc (unsigned int);

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

вызывающая функция();

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

Я сожалею, если это не полезно, но я думал, что это может быть достаточно, чтобы получить эту проблему через, не давая все 600 и что-то строка кода.

Предупреждение начинают Дано:

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

Что такое 'memoryHeader'? Это в стеке или куче? Я не думаю, что вам нужно 600 строк кода, но, возможно, 20 или 30 строк кода, которые могут ** воспроизводить **, проблема необходима для описания проблемы. –

+2

Это поможет, если проблема будет воспроизводимой. то есть Short, Self Contained, Correctable (Compilable), Example поможет; http://sscce.org/ – antak

+1

[Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) –

ответ

1

Код вызова функции my_malloc(), вероятно, не дают надлежащего объявление/прототип функции, так как это обрабатывать возвращенный указатель как int.

Поместите следующее сообщение перед номером my_malloc() (в идеале это должно быть в заголовке, который включается в любой код, вызывающий функцию, а также код, определяющий функцию, чтобы гарантировать ее правильность).

void* my_malloc(size_t size); 
+0

Я пробовал это и ничего не менял. –

+1

Тогда я думаю, вам нужно найти время для публикации примера вместо неполных фрагментов. –

Смежные вопросы