سؤال

لماذا يتم طرح هذا الرمز SIGSEGV:

int main()
{
    unsigned long toshuffle[9765625];

    unsigned long i;

    for (i=0; i< 1000; i++)
        toshuffle[i]= i;

    return 0;
}

سيكون موضع تقدير المؤشرات.(لا يقصد التوريه :))

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

المحلول

استخدم malloc () للحصول على هذا الكثير من الذاكرة. كنت فيضان المكدس.

unsigned long *toshuffle = malloc(9765625 * sizeof(unsigned long));

وبالطبع عند الانتهاء مع ذلك، سوف تحتاج إلى تحرير () عليه.

ملحوظة: في C ++، تحتاج للادلاء المؤشر إلى النوع الصحيح

.

نصائح أخرى

وربما لأنك لا يمكن تخصيص 9765625 صفقات الشراء على كومة (ما هو هذا الموقع ودعا مرة أخرى؟ :)). استخدام malloc() بدلا من ذلك.

من com.manpage

  • RLIMIT_STACK

الحد الأقصى لحجم مكدس العملية بالبايت.عند الوصول إلى هذا الحد، يتم إنشاء إشارة SIGSEGV.للتعامل مع هذه الإشارة، يجب أن تستخدم العملية مجموعة إشارات بديلة (sigaltstack(2)).

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