سؤال
لماذا يتم طرح هذا الرمز 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)).
لا تنتمي إلى StackOverflow