Sinyal işleyicisinin neden sonsuz döngüye gittiği hakkında bir fikriniz var mı?Sinyal işleyici neden sonsuz döngüye gider? - SIGSEGV
İşte kod. Lütfen bana yardım edin.
enter code here
9 void SIGSEGV_handler(int signal)
10 {
11 printf("Segmentation fault caught....\n");
12 printf("Value of instance variable: i = %d\n\n", i);
13 }
16
17 int main()
18 {
19 char *mallocPtr, *callocPtr, *reallocPtr, *memalignPtr, *vallocPtr;
20 struct sigaction sa;
21
22 sa.sa_handler=SIGSEGV_handler;
23 sigaction(SIGSEGV, &sa, NULL);
24
37
38 printf("The segmentation fault handler will be entered for i = 3, 4, 5 and 6\n");
39
40
41 for(i=0; i<7; i++)
42 {
43 printf("i = %d\n",i);
44
45 mallocPtr=(char*)malloc(3);
46 printf("Malloc address : %x\n",mallocPtr);
47 strcpy(mallocPtr, "Hhvhgvghsvxhvshxv");
48 puts(mallocPtr);
Sadece ben miyim, yoksa tüm "for" döngüsünü göndermediniz mi? Belki de daha da ileriye doğru bir şey yapıyorsunuz ve ben de bunu küresel olarak ilan ettiğine ve tek başına – Djole
yapmak için kötü bir şey olduğuna inanıyorsunuz. Bir sinyal işleyicide printf'i güvenilir bir şekilde çalamazsınız. SIGSEGV için bir işleyiciden güvenilir bir şekilde geri dönemezsiniz (bunun yerine çıkmalısınız). –
Hayır, çıkamıyorum .. çünkü benim durumumda, işleyiciye gideceği aralıkları yakalamam gerekiyor (3 ila 6 saniye olabilir). – kingsmasher1