web-dev-qa-db-ja.com

Cの構造体にメモリを割り当てる

構造体にメモリを動的に割り当てるプログラムを作成する必要があります。通常使用します

x=malloc(sizeof(int)*y);

ただし、構造変数には何を使用しますか?できるとは思わない

struct st x = malloc(sizeof(struct)); 

誰かが私を助けてくれますか?ありがとう!

28
Blackbinary

お気に入り:

#include <stdlib.h>

struct st *x = malloc(sizeof *x); 

ご了承ください:

  • xはポインターでなければなりません
  • キャストは不要です
  • 適切なヘッダーを含める
62
dirkgently

あなたはまったく正しいことをしていません。 _struct st x_は構造体であり、ポインターではありません。スタックに割り当てたい場合は問題ありません。ヒープに割り当てる場合は、struct st * x = malloc(sizeof(struct st));

6
David Thornley

struct st* x = malloc( sizeof( struct st ));

4

それは正確に可能です-そして正しい方法です

入力するつもりだったと仮定して

struct st *x = malloc(sizeof(struct st)); 

追伸すべてのコンテンツのサイズがわかっている場合でも、コンパイラが構造体をパディングしてメンバーが整列するため、sizeof(struct)を実行する必要があります。

struct tm {
  int x;
  char y;
}

サイズが異なる場合があります

struct tm {
  char y;
  int x;
}
3
Martin Beckett

これはする必要があります:

struct st *x = malloc(sizeof *x); 
2
codaddict

struct st *x = (struct st *)malloc(sizeof(struct st));

1
alemjerus