2013-03-29 2 views
1

Следующая программа не производит вывод. Он входит в цикл for и принимает одно значение (через scanf), но после этого блок кода останавливает выполнение. Ideone (онлайн-компилятор и инструмент отладки) говорит, что генерируется сигнал SIGXCPU.Ошибка SIGXCPU в программе C

#include <stdio.h> 
#include <stdlib.h> 

long fact(int); 
int z(int); 

int main() 
{ 
    int i, n; 
    scanf("%d",&n); 
    int a[10];long b[10]; 
    int c[10]; 
    for(i=0;i<n;i++) 
    { 
     scanf("%d", &a[i]); 
     b[i]=fact(a[i]); 
     c[i]=z(b[i]); 
    } 
    printf("\n"); 
    for(i=0; i<n; i++) 
    { 
     printf("%d", c[i]); 
    } 
    return 0; 
} 

long fact(int m) 
{ 
    if (m==1) return 1; 
    else return (m*fact(m-1)); 
} 

int z (int s) 
{ 
    int c=0, temp; 
    temp=s%10; 
    if(temp!=0) return c; 
    else 
    { 
     c++; z(temp); 
    } 
} 

Что означает сигнал SIGXCPU?

+0

Ideone - это онлайн-компилятор и инструмент для отладки. В вашей программе используется Ideone, который также используется другими пользователями. Ваш код превысил бы предел на потребляемое процессорное время. –

+0

Это сообщение, которое вы обычно не получаете в своей собственной системе, но Ideone установил предел, чтобы установить верхнюю границу того, сколько разрешений CPU для каждой программы разрешено. Найдите RLIMIT_CPU, чтобы узнать, как можно установить эти ограничения для себя. – grasshopper

ответ

7

Сигнал SIGXCPU посылается каждую секунду процессу после того, как он превышает свой предел на потребляемое процессорное время (RLIMIT_CPU), или, для процессов в реальном времени, его предел при работе без сна. Проблема заключается в вашей рекурсивной функции z, которая не останавливается и вызывает себя снова и снова (и вызывает переполнение стека). Исправьте его состояние остановки.

На странице signal человек:

Signal | Default Action | Description 
-------+----------------+------------------------- 
SIGXCPU| A    | CPU time limit exceeded. 

Настройки по умолчанию действия заключаются в следующем:

A - ненормальное завершение процесса. Кроме того, могут возникнуть определенные аномальные действия завершения, , такие как создание основного файла.

4

Вероятно, это больше потребляет процессорное время и/или связанные ресурсы, чем идеон позволит так, чтобы ваша программа не перегружала сайт.

Проверьте условия рекурсии и завершения.

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