ошибка времени выполнения (SIGSEGV) - PullRequest
0 голосов
/ 22 апреля 2010

Я был бы рад узнать, почему я получил эту ошибку за проблему http://www.codechef.com/problems/AXR1P2 в codechef.com, и мой код ...

#include<stdio.h>
#include<stdlib.h>
int main()
{
int *num=0,n=0,i=0,max=0;char *s="";
int sum[9]={1,5,14,20,25,31,32,38,39},dsum[9]={1,7,8,14,19,25,26,32,33},unitdig=0;
do
{
  gets(s);
*(num+i)=(int)atoi(s);
i++;
}while(*s!='#');
max=i;
for(i=0;i<max-1;i++)
{
 n=*(num+i);
 if(n>10)
  unitdig=33*(n/10-1)+39+dsum[(n%10)-1];
 else
  unitdig=sum[(n%10)-1];
   printf("%d\n",unitdig%10);
}
 getchar();
return 0;}

Ответы [ 2 ]

3 голосов
/ 22 апреля 2010

Несколько ошибок:

char * s = "";
...
gets(s);

вы пытаетесь прочитать строковый литерал, вы хотите:

char s[SOMESIZE];

И вы не инициализировали num, чтобы указывать на что-либо, поэтому в:

*(num+i)=(int)atoi(s);

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

0 голосов
/ 22 апреля 2010

У вас есть указатель типа int (num), который не указывает на выделенное пространство. Любой доступ к этому указателю приведет к неожиданному поведению.

...