-6

私はこのようなコードセグメントを持っています

typedef struct node* node_t;

struct node{
int value;
node_t link;
};

......
......
......

//now I want to allocate memory somewhere else in the program.
node_t x;
x=(node_t) malloc(sizeof *x);

上記の記述が適切かどうか教えてください。Eclipseはこの警告を表示します

warning: implicit declaration of function ‘malloc’ [-Wimplicit-function-declaration]
../tree.c:22:9:
warning: incompatible implicit declaration of built-in function ‘malloc’    

誰かがこのような状況について詳細に説明できますか?これで実際に何が問題になっていますか。このプログラムでメモリを割り当てることができるすべての可能な方法をリストしていただければ幸いです。前もって感謝します..

4

4 に答える 4

1

使用mallocするには、 を含める必要があります<stdlib.h>。さらに、次のようにメモリを割り当てます

node_t x = malloc(sizeof node_t);

メモリをスタック変数に割り当ててはならず、ポインターにのみ割り当ててください。mallocまた、戻り値void*と this を明示的にキャストする必要がないため、割り当てられた型にキャストバックしないでください。

于 2013-03-23T07:57:37.840 に答える
0

あなたは

#include <stdlib.h>

使用する前にmalloc。ソースで関数が間違っていると宣言したようです。C標準ライブラリ関数を宣言しないでください。それらを宣言するヘッダーを含めるだけです。

于 2013-03-23T07:54:20.743 に答える
0

上記の記述が適切かどうか教えてください。

いいえ、そうではありません。の戻り値をキャストしてmalloc()いて、<stdlib.h>ヘッダーがありません。

于 2013-03-23T07:55:09.590 に答える
0

mallocスコープ内の宣言がないため、警告が表示されます。stdlib.hヘッダー ファイルを含める必要があります。

#include <stdlib.h>

キャストもドロップする必要があります。intこれは必要ではなく、他のコンパイラでは、ポインター型に値を 代入しようとしているという診断が抑制されます。

typedef の背後にポインターを隠さないでください。ほとんどの場合、それは悪い考えです。

于 2013-03-23T11:23:35.170 に答える