0

私が開発しているプログラムでは、次の構造を持っています。

typedef struct _event {
  int id;
  char title[30];
  char desc[60];
  int state;
} event;

このプログラムの特定の部分で、この構造体へのポインターを必要とする関数を使用します。

void event_foo(event *e)
{
 /* Something will be done on this function, 
    with certain parameters of the pointer to the struct are needed */
}

しかし、この関数にアクセスする前に、構造体へのこのポインタにメモリを割り当てる必要があります。

int main()
{
  event newevent;

  /* In some place before invoking the function, 
     memory assignation is required */

  event_foo(&newevent);

  return 0;
}

それを行うための提案はありますか?

4

3 に答える 3

3

これ:

event newevent;

のスタック割り当てインスタンスを作成し、eventメモリはすでに提供されています。このメモリはnewevent範囲外になるまで有効です。event_foo()のメンバーを更新するだけでなく読み取る場合は、を呼び出す前にneweventのメンバーを初期化する必要があります。neweventevent_foo()

へのポインタを宣言した場合event:

event* newevent;

neweventその場合、そのメンバーにアクセスする前にメモリを割り当てる必要があります。

newevent = malloc(sizeof(*newevent));

neweventこの場合、 exists untilのメモリfree(newevent)が呼び出されます。

于 2013-04-10T16:19:24.517 に答える
0

e が引数として渡されたオブジェクトを指すためだけに必要な場合は、それにメモリを割り当てる必要はありません。ポインタを介して、オブジェクトのメモリ位置に直接アクセスしているため、渡されたオブジェクトのメンバーに直接変更を加えることができます。

于 2013-04-10T16:21:09.900 に答える