Ошибка времени выполнения: SIG SEGV

0

У меня возникла проблема с отправкой проблемы с названием "Денежная трансформация" на популярном кодеке сайта codechef. Я получаю имя ошибки во время выполнения SIG SEGV каждый раз, когда я отправляю решение. SIG SEGV некоторого поиска в google я обнаружил, что это какая-то сегментация fault..I пробовал все возможные решения, заданные в Codechef FAQ, но не мог получить его правильно. Также эта ошибка должна быть специфичной для компилятора. Я использую CodeBlock (12.1) на своей машине с ее мини-компилятором, и моя программа работает отлично..Пожалуйста, помогите мне разобраться в проблеме и решить ее. Ниже моя программа (после того, как я отредактировал ее в соответствии с решением кодека faq)

#include <iostream>

using namespace std;
int i=0;
class money
{
  public:
    int a[101],b[101];
    money()
    {
        for(int t=0;t<102;t++)
        {
            a[101]=0;
            b[101]=0;
        }
    }
};
money m;
void swp(int &a,int &b)
{
    int temp=0;
    temp=a;
    a=b;
    b=temp;
}
int maximum()
{
    int x=0;
    m.a[100]=m.a[0];
    m.b[100]=m.b[0];
    for(int j=1;j<=(i+1);j++)
    {
        if(m.a[j]>m.a[100])
       {
            m.a[100]=m.a[j];
            m.b[100]=m.b[j];
            x=j;
       }
        if(m.a[j]==m.a[100])
       {
            if(m.b[i]>m.b[100])
            {
                m.a[100]=m.a[j];
                m.b[100]=m.b[j];
                x=j;
            }

        }
    }
    return x;
}
void moneytransform(int a,int b,int c)
{
    m.a[0]=a;
    m.b[0]=b;
    while(true)
    {
         if(c>m.b[i]&&m.a[i]>0)
        {
            m.a[i+1]=m.a[i]-1;
            m.b[i+1]=m.b[i]+100-c;
        }
        else
        {
            m.a[i+1]=m.a[i];
            m.b[i+1]=m.b[i]-c;
        }
        swp(m.a[i+1],m.b[i+1]);
        if((m.b[i]<c&&m.a[i]==0)||(m.a[i+1]>100||m.b[i+1]>100))
        {
                return;
        }
        i++;
    }

}

int main()
{
    int T,A,B,C,M;
    do
    {
       cin>>T;
     }while(T>40);
     int noc=1;
     while(noc<=T)
    {
        do
    {
        cin>>A>>B>>C;
    }while(A<0&&B<0&&C<0&&A>100&&B>100&&C>100);
    moneytransform(A,B,C);
    M=maximum();
    cout<<M;
    noc++;
    }
    return 0;
 }

и ссылка на проблему с кодеком - это http://www.codechef.com/problems/MONTRANS/

  • 0
    Вам нужен отладчик, чтобы узнать, что сломано (в вашем случае это, скорее всего, неверный доступ). Google "GDB". Это также выглядит полезным.
Теги:

1 ответ

3

В вашем денежном конструкторе у вас есть

money()
{
    for(int t=0;t<102;t++)
    {
        a[101]=0;
        b[101]=0;
    }
}

Вы получаете доступ к [101], который находится за пределами границ массива. Массив имеет размер 101, поэтому действительные индексы равны 0-100. Независимо от того, вы, вероятно, хотели сделать что-то еще, нет необходимости писать 0 в одно и то же место снова и снова.

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

  • 0
    И, возможно, OP также должен знать "Что может вызвать ошибки сегментации в C ++?" - stackoverflow.com/questions/6923574/… (где доступ к массиву вне границ является одной из возможных причин).
  • 0
    Я также запустил его в dubugger .. Но он не сообщил об ошибке .. Я запустил его в интегрированном отладчике по умолчанию в кодовый блок 12.1 ..
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню