3

int の構造体にメモリを割り当てようとすると、このエラーが発生します。

typedef struct _values {
random ints;
} values;

以下の行を試しましたが、コンパイラが気に入りません。エラーを修正するにはどうすればよいですか?

values v;
v = malloc(sizeof(values));
4

3 に答える 3

6

ポインターとしてマークするためにvalues、 の前後にアスタリスク (*) を追加するのを忘れました。vvalues *v;

今設定した方法では、v (アスタリスクなし) はスタック変数として定義され、スタックに割り当てられ、関数が終了すると破棄されます。そのタイプは単純になりますvaluesmallocヒープにメモリを割り当てるために使用され、メモリへのポインタを返します。関数が型として返す型を知る方法がないためvoid *、エラーが発生します-void *型を型に代入しようとしていますstructが、コンパイラはそれを実行できず、コンパイラは正当な型を見つけることもできません問題を解決できるキャスト。

于 2012-05-19T06:53:26.993 に答える
3

mallocこの場合、記憶する必要はありません。行はvalues v;すでにメモリを割り当てています(「スタック上」)。現在のスコープを離れると、自動的に解放されます。

メモリを「ヒープ上」に割り当てて、現在のスコープを超えて保持したい場合はv、ポインタにする必要があります。あれは:

values *v;
v = malloc(sizeof(values));

free終わったら思い出してください。

于 2012-05-19T06:53:24.120 に答える
2

values v;

これは、スタックに割り当てられた構造のインスタンスです。

v = malloc(sizeof(values));

mallocはポインターを返し、void*コンパイラーはポインターをインスタンスに割り当てることを許可しません。

ポインターを宣言してから、mallocリターンポインターをそれに割り当てる必要があります。

ある種の何か

値*v= NULL;

v = malloc(sizeof(values));

于 2012-05-19T06:56:44.587 に答える