سؤال

ونظرا لبنية، منها مثلا.

typedef struct
{
  int value;
} TestStruct;

وماذا التعليمة البرمجية التالية (في سياق الهدف-C الطبقة تشغيل على اي فون) رمي "عدم الانحياز مؤشر يتم تحرير" استثناء؟

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

وN.B. هدفي اوبر هو استخدام مكتبة C مع العديد من المهام ناقلات الرياضيات، وبالتالي الحاجة إلى معرفة بعض سيلة ناجعة لخلط C والهدف-C

هل كانت مفيدة؟

المحلول

ويبدو لي كما لو كنت تحاول تحرير كومة أو متغير ثابت. تحتاج إلى أن يكون 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;
}

وهذا يتيح لك تخصيص البنية وتعيين القيم في خطوة واحدة. فقط تذكر أنه ينبغي الإفراج عن هذه القيمة مرة واحدة انها لم تعد مفيدة:

TestStruct *x = newTestStruct(3);
free(x);

نصائح أخرى

ولأن تحاول تحرير شيء التي تم تخصيصها على المكدس. لا يمكن إلا أن يسمى وظيفة خالية () على الذاكرة التي تم تخصيصها مع malloc ().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top