2015-03-30 2 views
0

В настоящее время я пытаюсь прочитать две строки s и t, которые будут введены в stdio. Они будут вводиться по отдельным строкам.два последовательных fgets seg faults

Следующий код segfaults.

#include <stdio.h> 
#include <string.h> 
#include <math.h> 

int main() 
{ 
    char t[5000000]; 
    char s[5000000]; 

    fgets(t,50000,stdin); 
    fgets(s,50000,stdin); 

    printf("%c",t[1]); 


} 

Однако одного фэга нет.

#include <stdio.h> 
#include <string.h> 
#include <math.h> 

int main() 
{ 
    char t[5000000]; 
    char s[5000000]; 

    fgets(t,50000,stdin); 

    printf("%c",t[1]); 

} 

Другие сообщения говорят о некоторых возвратах и ​​проблемах «/ n», но я не понимаю, в чем проблема.

+1

Измените 't' и' s' на 'static char []', чтобы проверить, не переполнение стека или нет. – timrau

+0

@timrau это переполнение стека –

+0

Да, это было, спасибо! Можете ли вы объяснить, почему это решило? – Essam

ответ

0

Массивы слишком велики, чтобы объявить их в стеке, он заполняется и происходит переполнение стека, либо объявляйте их в куче с malloc, либо уменьшите их размер.

Объявление их static также заставит его работать, поскольку статические переменные хранятся в другом месте в памяти, а не в стеке.

0

FYI:

размер стека варьируется в зависимости от платформы, на Linux размер стека платформы по умолчанию 8MB. Вы можете изменить его, а также изменить его в соответствии с вашими потребностями с помощью системных вызовов getrlimit() и setrlimit().

Смежные вопросы