4

与えられた構造体、例えば

typedef struct
{
  int value;
} TestStruct;

次のコード (IPhone で実行されている Objective-C クラスのコンテキストで) が「解放されているアライメントされていないポインター」例外をスローするのはなぜですか?

TestStruct ts = {33};
free(&ts);

NB私の究極の目標は、多くのベクトル数学関数を備えたCライブラリを使用することです。したがって、CとObjective-Cを混在させる実行可能な方法を見つける必要があります

4

2 に答える 2

25

スタックまたは静的変数を解放しようとしているように見えます。free() できるようにするには、何かを malloc() する必要があります。

代わりにこれを試してください:

TestStruct *ts = malloc(sizeof(TestStruct));
ts->value = 33;
free(ts);

オブジェクト指向言語に精通している場合は、コンストラクターを作成すると役立つ場合があります。

TestStruct *newTestStruct(int value)
{
    TestStruct *ret = malloc(sizeof(TestStruct));
    ret->value = value;
    return ret;
}

これにより、構造体の割り当てと値の設定を 1 ステップで行うことができます。この値は、役に立たなくなったら解放する必要があることに注意してください。

TestStruct *x = newTestStruct(3);
free(x);
于 2009-01-08T17:48:48.627 に答える
7

スタックに割り当てられたものを解放しようとしているためです。関数 free() は、malloc() で割り当てられたメモリでのみ呼び出すことができます。

于 2009-01-08T17:47:53.233 に答える