为什么以下代码显示运行时错误(SIGSEGV)?

时间:2016-02-18 18:31:32

标签: c

这是我对SPOJ(Sphere Online Judge)(http://www.spoj.com/problems/PRIME1/)上的Prime Generator问题的解决方案。我使用malloc()分配了内存,但它仍然显示运行时错误(SIGSEGV)。

#include <stdio.h>
#include <stdlib.h>
int main(){
    int n;
    scanf("%d", &n);
    while(n--){
        int a,b;
        scanf("%d %d", &a, &b);
        int *z =malloc(sizeof(int)*(b-1));
        // Filling the array
        int i;
        for(i=0;i<b-1;i++){
            z[i]=i+2;
        }

        int k,p;
        for(k=0;k<=b-2;k++){
            if(z[k]){
                if(z[k]>=a){
                    printf("%d\n", z[k]);
                }
                for(p=k+z[k];p<=b-2;p+=z[k]){
                    z[p]=0;
                }       
            }
        }
        free(z);    
    }
    return 0;
}

0 个答案:

没有答案