質問
構造体を指定します。例:
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()で割り当てられたメモリでのみ呼び出すことができます。
所属していません StackOverflow