2016-04-25 5 views
-2

免責事項:これは宿題のためのものですが、質問される質問は実際の割り当てとは無関係です。ポインタ値が返された後に変更されるのはなぜですか?

関数から返される直前のmy_malloc関数で、自分のクラスの1つに単純なメモリマネージャを実装する必要があります。返される値はこれ(つまり: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

問題が再現可能であれば、それは役に立ちます。すなわち、短い、自己包含、正しい(コンパイル可能)、例は助けになる; http://sscce.org/ – antak

+1

[最小限で完全で検証可能なサンプルを作成する方法] –

答えて

1

my_malloc()関数を呼び出すコードは、おそらく機能のための適切な宣言/プロトタイプを与えられていないので、それはintとして返されたポインタを処理することです:

警告が与えられ始めます。

my_malloc()への呼び出しの前に、次のコードを置いてください(これは、関数を呼び出すコードとそれが正しいことを保証する関数を定義するコードに含まれるヘッダーにあるのが理想です)。

void* my_malloc(size_t size); 
+0

私はそれを試みたが、何も変わらなかった。 –

+1

次に、不完全なスニペットの代わりにサンプルを投稿する時間を見つける必要があると思います。 –

関連する問題