segmentation fail

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
KayTo
Сообщения: 1
Зарегистрирован: 10 май 2013, 09:03

Друзья! Спасу нет от ошибок сегментирования :( На ДЕв С++ все работает нормально, а на другом компиляторе пишет - ошибка сегментирования. Помогите подправить код.

Код: Выделить всё

#include <stdio.h>
const int n = 3;
const long z=100000000;
 main()
{

 int s[n][n],i,j,k,c,a[n],g[n],b[n],min,m=0;
 int ptr=0;
 for ( i = 0; i < n; i ++ )
{ a[i]=0;
 b[i]=0;
 s[i][i]=0;}
 for ( i = 0; i < n; i ++ )
 for ( j = 0; j < n; j ++ )
  {
     printf ("s[%d][%d]=", i, j);   //podskazka dlya vvoda
     scanf ("%d", & s[i][j]);       // vvod massiva
     }

printf("c=");
scanf("%d",&c);

for(i=1;i<n;i++)
  {
  a[i]=0;
  if(s[c][i]!=z)
  b[i]=s[c][i];
  else b[i]=z;
  }
 a[c]=1;


      for(i=0;i<n-1;i++)
       {
                for(k=0;k<n;k++)
                {
                                min=b[0];
                                if(b[k]<min && a[k]!=1)
                               { min=b[k];
                                m=k;}}
                    for (j=0;j<n;j++)
                    {
                        if(s[m][j]+b[m]<b[j])
                        {b[j]=s[m][j]+b[m];}
                       
                        
                         a[m]=1;}
                        }                
      
                    for (j=0;j<n;j++)
                    for(i=0;i<n;i++){
                    {
                      if(s[i][j]+b[i]<b[j])
                        {ptr=1; }}}
    if(ptr==1) printf("est otricatelny cikl") ;
    else{          
               for (i=0;i<n;i++)   
              {printf("%d->%d=%d\n",c,i,b[i]);}}
  }
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

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

2) Чисто c какое вводится с клавиатуры? Ожидаем segmentation fault, если оно будет меньше нули, либо больше двух.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить