#8158: 記憶體區段問題?(本機測試正確)


HolmesChang (HolmesChang)

學校 : 不指定學校
編號 : 34524
來源 : [1.171.4.142]
最後登入時間 :
2013-10-04 14:09:10
a005. Eva 的回家作業 -- POJ | From: [1.171.4.142] | 發表日期 : 2013-09-08 21:42

我的程式碼如下

自己主機用DEV-C++ 4.9.9.2編譯都可以有正確結果

但是On-Line Judge一直出現Segmentation Fault問題

請問是否有高手知道問題點

[Code]

 #include <stdio.h>

#include <memory.h>

 

//#define LoS 5;

 

int main(void){

 

    int LoS=5;

    

    unsigned int n=0,*S[n],i,j;

    unsigned int* TS=NULL;

    

    while(scanf("%d",&n) != EOF){

 

        /* 動態配置陣列記憶體空間 */ 

        for(i=0;i<n;i++){

 

            S[i] = (int*)malloc(LoS*sizeof(int));

            

            }

            

        /* 動態配置陣列記憶體空間 */

        for(i=0;i<n;i++){

 

            scanf("%d %d %d %d",&S[i][0],&S[i][1],&S[i][2],&S[i][3]);

 

            }

        

        for(i=0;i<n;i++){

                         

            if((S[i][1]-S[i][0])==(S[i][2]-S[i][1])){

 

                S[i][LoS-1] = S[i][LoS-2]+(S[i][1]-S[i][0]);

                for(j=0;j<LoS;j++) printf("%d ",S[i][j]);

 

                }

            else{

 

                S[i][LoS-1] = S[i][LoS-2]*(S[i][1]/S[i][0]);

                for(j=0;j<LoS;j++) printf("%d ",S[i][j]);

 

                }

                

            printf("\n");    

                

        }        

 

    }

 

    getchar();

    return 0;

}

[/Code] 

 
#8160: Re:記憶體區段問題?(本機測試正確)


rosynirvana (rosynirvana)

學校 : 不指定學校
編號 : 33880
來源 : [182.114.3.244]
最後登入時間 :
2017-07-24 00:02:04
a005. Eva 的回家作業 -- POJ | From: [58.247.231.69] | 發表日期 : 2013-09-09 02:07

我的程式碼如下

自己主機用DEV-C++ 4.9.9.2編譯都可以有正確結果

但是On-Line Judge一直出現Segmentation Fault問題

請問是否有高手知道問題點

[Code]

 #include

#include

 

//#define LoS 5;

 

int main(void){

 

    int LoS=5;

 

    unsigned int n=0,*S[n],i,j;

    unsigned int* TS=NULL;

 

    while(scanf("%d",&n) != EOF){

 

        /* 動態配置陣列記憶體空間 */ 

        for(i=0;i

 

            S[i] = (int*)malloc(LoS*sizeof(int));

 

            }

 

        /* 動態配置陣列記憶體空間 */

        for(i=0;i

 

            scanf("%d %d %d %d",&S[i][0],&S[i][1],&S[i][2],&S[i][3]);

 

            }

 

        for(i=0;i

 

            if((S[i][1]-S[i][0])==(S[i][2]-S[i][1])){

 

                S[i][LoS-1] = S[i][LoS-2]+(S[i][1]-S[i][0]);

                for(j=0;j

 

                }

            else{

 

                S[i][LoS-1] = S[i][LoS-2]*(S[i][1]/S[i][0]);

                for(j=0;j

 

                }

 

            printf("\n");    

 

        }        

 

    }

 

    getchar();

    return 0;

}

[/Code] 

建议本地试验时用-Werror -ansi -pedantic参数编译

memory.h

unsigned int *S[n]

这些东西在C90标准下都是不允许的

而且这题目本身也没必要动态分配内存,用一个长度为4的array存储一下然后检验是等差还是等比就可以了

 
#8161: Re:記憶體區段問題?(本機測試正確)


HolmesChang (HolmesChang)

學校 : 不指定學校
編號 : 34524
來源 : [1.171.4.142]
最後登入時間 :
2013-10-04 14:09:10
a005. Eva 的回家作業 -- POJ | From: [1.171.4.142] | 發表日期 : 2013-09-09 10:08

 

建议本地试验时用-Werror -ansi -pedantic参数编译

memory.h

unsigned int *S[n]

这些东西在C90标准下都是不允许的

而且这题目本身也没必要动态分配内存,用一个长度为4的array存储一下然后检验是等差还是等比就可以了

 

請問要怎麼在DEV-C++裡面將編譯器設定成排除非標準的語法?

抱歉因為網路上做了一些搜尋,還是看不懂怎麼使用。

這題的確沒必要動態配置,只是剛好學習到動態配置,希望可以寫成可以輸入超過Spec (第一行是數列的數目t(0 <= t <= 20))中要求的最多20個數列 。(任意指定數列數量,但是不佔用額外記憶體,非一開始先宣告一個二維陣列,e.x. S[20][5])

好像想太多了~

另外,後來問題解決了。我把n初始化成任意一個正整數(非0),On-Line Judge就通過了。似乎是不能一開始先宣告一個0 size的pointer array (memory dangling??),後續再利用n修改pointer array size,再配置相對應的記憶體空間。

我會再想想看如果我還是想要達成前面說的功能要怎麼做。

感謝你的回答。

 



 
ZeroJudge Forum