سؤال

لقد حصلت على خطأ مجنون في هذا الحلقة

matr=realloc(matr, newmax*sizeof(matr*));

for (i=0; i<newmax; i++){
    matr[i]=realloc(matr[i], newmax*sizeof(int));
}

MATR هو مجموعة متعددة الأبعاد: int ** MATR. أحتاج إلى تغيير حجم العمود والصف. قم بتغيير حجم الخط الأول وتغيير حجم الحلقة من كل صف. عملت بشكل جيد في ج. الآن أنا أعمل على مكتبة لوا وتحطمها هنا. compilin 'يعمل بشكل جيد كذلك. لكن الاتصال من لوا تحطم مع

lua: malloc.c:3552: mremap_chunk: Assertion `((size + offset) & (mp_.pagesize-1)) == 0' failed.

ليس لدي أي فكرة لعنة لأنها تعمل بشكل جيد باستخدامها في ج.

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

المحلول

بعد الاتصال realloc, ، محتويات الجزء المخصص حديثا غير محددة. هذا يعني ذلك ثم الاتصال realloc قد تفشل في الصفوف الجديدة لأنه يحاول إعادة تخصيص مؤشر غير صالح.

يمكنك استخدام realloc على الصفوف القديمة و malloc على الصفوف الجديدة لإصلاح هذا. أو يمكنك صفر الجزء الجديد بعد الأول realloc, ، ثم ستعمل حلقتك كما هي:

matr=realloc(matr, newmax*sizeof(matr*));
for (i=oldmax; i<newmax; i++)
    matr[i] = NULL;

for (i=0; i<newmax; i++){
    matr[i]=realloc(matr[i], newmax*sizeof(int));
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top