2012-10-14 7 views
0

내 프로그램의 목적은 사용자 입력으로 표시된 소수를 찾는 것입니다. 나는 그것을 발견 할 때 소수를 저장하기 위해 배열을 설정했다. p (테스트중인 정수)가 증가하고 테스트가 다시 시작되면 배열 내의 요소로 나누어 처리가 저장됩니다. 44030 번째가 될 때까지 잘 작동합니다. 나는 GCC를 사용하여 컴파일하고있다. 왜 내가 세그먼트 오류를주는거야? 당신은 cap 바이트보다는 당신의 malloc() 호출 cap*sizeof(long) 바이트를 할당하는조건부 세그먼트 화 오류

//Prime Finder 
#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
int i=4; 
int p=7; 
int j=1; 
int cap; 
printf("\nWhich prime number would you like to see? "); 
scanf("%i",&cap); 
long *array=malloc(cap); 
array[0]=1; 
array[1]=2; 
array[2]=3; 
array[3]=5; 
while(i<=cap) 
{ 
if (array[j]>=p/2) // if true then p is prime 
{ 
    j=1; 
    array[i]=p; 
    p++; 
    i++; 
} 
else if (p%array[j]==0) // if true then p is not prime 
{ 
    p++; 
    j=1; 
} 
else // in this case p is still under test 
    j++; 
} 
printf("\nHere it is! %i\n\n",array[cap]); 
return 0; 
} 
+0

특정 소수는 단지 int의 저장 길이를 초과 할 수 있습니까? (어떤 지식으로도 방해받지 말고 답하십시오) – SchmitzIT

+0

나는 그렇게 생각하지 않습니다. Int는 2,147,483,647까지 좋습니다. 44030 번째 소수는 532691입니다. – bobweek

+0

좋아요, 걱정할 필요가 없습니다. 그냥 생각 이었어 :) – SchmitzIT

답변

0

. 그래서 당신은 메모리의 다른 부분을 덮어 쓰고 있습니다. 정확하게 언제 당신이 모자를 씌우기 위해 제공 한 가치에 달려 있습니다.

+0

그게 하나야! 고쳤다! 고맙습니다! :디 – bobweek

관련 문제