- ВКонтакте
- РћРТвЂВВВВВВВВнокласснРСвЂВВВВВВВВРєРСвЂВВВВВВВВ
- РњРѕР№ Р В Р’В Р РЋРЎв„ўР В Р’В Р РЋРІР‚ВВВВВВВВРЎР‚
- Viber
- Skype
- Telegram
Почему не срабатывает signal в функции?
Почему в функции «qsortx» не срабатывает сигнал? Ведь по идее условие if выполняется, так как i > size. Функция просто продолжает свою работу
Полный код:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void qsortx(int[], size_t);
void sig_handler(int);
int main(void) {
size_t size = 5;
int* ptr_mem = (int*)calloc(size, sizeof(int));
if(ptr_mem == NULL) {
perror("allocate");
}
for(int i = 0; i < size; i++) {
ptr_mem[i] = 10-i;
}
qsortx(ptr_mem, size);
for(int i = 0; i < size; i++) {
printf("%d\n", ptr_mem[i]);
}
free(ptr_mem);
return 0;
}
void qsortx(int mass[], size_t size) {
static int i = 22; //counter
int tmp = 0;
signal(SIGSEGV, sig_handler);
while(i < size) {
if(i == 0) {
i = 1;
} else if (i > size) {
raise(SIGSEGV);
break;
}
if(mass[i-1] <= mass[i]) {
++i; // next step;
} else {
tmp = mass[i];
mass[i] = mass[i-1];
mass[i-1] = tmp;
--i; // back step;
}
}
}
void sig_handler(int sig) {
printf("Signal: %d\n", sig);
exit(EXIT_FAILURE);
}