我的程式碼如下
自己主機用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]
我的程式碼如下
自己主機用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存储一下然后检验是等差还是等比就可以了
建议本地试验时用-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,再配置相對應的記憶體空間。
我會再想想看如果我還是想要達成前面說的功能要怎麼做。
感謝你的回答。