質問

構造体を指定します。例:

typedef struct
{
  int value;
} TestStruct;

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

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

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

役に立ちましたか?

解決

スタックまたは静的変数を解放しようとしているように見えます。 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);

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top