0

このエラーは、spoj.pl で送信しようとするすべてのプログラムで表示され続けます

与えられたコードでは、t no に対して m - n の間の素数を見つける必要があります。テストケースの。問題の説明: http://www.spoj.com/problems/PRIME1/ 同じエラーが表示されます..このエラーが再び表示される理由を教えてください..これが私のコードです

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

int main()

{
  int t;
  scanf("%d",&t);
  int *m,*n;
  m=(int *)malloc(sizeof(int)*t);
  n=(int *)malloc(sizeof(int)*t);
  int i=0;
  while(i<t)
     {
          scanf("%d%d",(m+i),(n+i));
          i++;
      }
  i=0;
  while(i<t)
    {
      long long int *list,j,k;
      list=((long long int*)malloc(sizeof(long long int)*(n[i]+1)));
      list[0]=list[1]=0;
      for(j=2;j<=*(n+i);j++)
           {
               *(list+j)=1;
           }
      float l=sqrt(*(n+i)+1);
      //int l=sqrt(*(n+i)+1);

      for(j=2;j<=l;j++)
           {
               if(*(list+j)==1)
                   {
                       //printf("\n%ld",j);
                       for(k=j*j;k<=*(n+i);k=k+j)
                           *(list+k)=0;
                    }
            }
      for(j=m[i];j<=n[i];j++)
           {
               if(*(list+j)==1)
                   {
                       printf("\n%ld",j);
                    }
            }
      printf("\n");
      free(list);
      i++;
 }
free(m);
free(n);  
return 0;
}
4

2 に答える 2

2

まず、malloc をキャストしないでください。予期しないエラーが発生する可能性があります。

第二に、必要なメモリを割り当てたという検証はありません。メモリを要求している 3 つの異なる場所があり、malloc が NULL の結果を返したかどうかを確認することはありません... tand/or(n[i]+1)が十分に大きい場合、malloc() は、この場合、NULL ポインターに割り当てようとしていて、SIGSEGV を取得します。問題の説明にヒントがあります。

警告: 入力/出力データが大きいため、特定の言語には注意してください (ただし、アルゴリズムが適切に設計されていれば、ほとんどの言語は問題ありません)。

于 2013-04-05T19:22:27.477 に答える
0

Seems to work fine on my computer, except for the warning about using %ld (%lld should be used). I can only obtain a SIGSEGV error when putting 0 as a value for n[i]. Could you indicate what values you used to generate that error?

Edit : You are testing for the values "1 888888888 1000000000". Your computer simply can't allocate an array of such size. You are asking an array of size 1000000001 in your memory. That amounts to about 8GB (since a long long int as about 8B, at least on my computer), which is pretty much undoable for your computer.

于 2013-04-05T19:14:56.363 に答える