私はこのコードに関する質問があります。私は自分のフレームワークにこのコードを書いて、フレームワークをクラッシュさせました。しかし、以下のコードを1つのファイルに書き直すと、うまく動作します。私はちょうど不思議だった、以下のコードは、メモリの割り当てとそれを解放するための正しいですか? (特にmsg-> context_var.type = Fの一部について;) は、それは間違っているあなたにフレームワークをクラッシュさせるコードですが、1つのファイルで再生した場合、それは正常に動作しました
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int value;
int price;
int old;
} type_t;
typedef struct {
type_t *type;
} context_t;
typedef struct {
context_t context_var;
} send_request;
void send_Message(send_request *msg)
{
type_t *f = 0;
f = malloc(sizeof(f));
msg->context_var.type = f;
msg->context_var.type->price = 1;
msg->context_var.type->value = 100;
msg->context_var.type->old =120;
printf("value of %d/n", msg->context_var.type->price);
free(f);
}
int main()
{
send_request *msg = 0;
msg = (send_request *) malloc(sizeof(send_request));
send_Message(msg);
free(msg);
return 0;
}
もう一つの方法は、宣言と代入を結合し、sizeof(type_t)をmallocに渡すことです。 –
@MartinTörnwall私はそれが気に入っていますが、悲しいことに、非c99コンパイラ(clのような)を使うときは避けなければなりません。 – cnicutar
@ MartinsTörnwall、宣言と割り当てを組み合わせるとどういう意味ですか?申し訳ありませんが、私はそれを取得しません.. – heike