2016-09-29 2 views
0

文字列を配列にコピーして印刷しようとしています。最初のforループでは動作しますが、2回目にsegフォルトが発生します。あなたがそうでない場合は、全ての反復、あなたが上書きしている(そして最後に、漏れ)メモリ、最初forループの外側argumentArray文字列を配列にコピーする - strcpy segfault

argumentArray = (char**) malloc((argc+1)*sizeof(char*)); 

のための割り当てを移動する必要があり

main (int argc, char *argv[]){ 
int argcIndex; 
char **argumentArray = NULL; 

for(argcIndex=0; argcIndex < argc; argcIndex++){ 
    argumentArray = (char**) malloc((argc+1)*sizeof(char*)); 
    argumentArray[argcIndex] = (char*) malloc(((strlen(argv[argcIndex])+1)*sizeof(char))); 
    strcpy(argumentArray[argcIndex], argv[argcIndex]); //Works here 
    printf("argumentArray[%d]: %s \n", argcIndex, argumentArray[argcIndex]); //Works here 
} 

for(argcIndex=0; argcIndex < argc; argcIndex++){ 
    //strcpy(argumentArray[argcIndex], argv[argcIndex]); //This gives me a segfault 
    printf("argumentArray[%d]: %s \n", argcIndex, argumentArray[argcIndex]); //This will only grab the last string in array 
} 

}

+0

[C ' ''でのmalloc() 'と家族の戻り値をキャストさせない理由でこの議論を参照してください。](http://stackoverflow.com/q/605845/2173917)。 –

+0

@ SouravGhosh私はキャストを取り去り、2番目のprintf文は配列に渡された最後の文字列を取ります。 – Felicia

答えて

1

。その下に

問題は、初期化されていないメモリmalloc()リターンであり、最後の反復のために、唯一の指標、argc-1書き込まを取得しているので、他のインデックスの内容は不定のままです。後のループで、その値を使用しようとすると、undefined behaviorが呼び出されます。

+0

ありがとう!私はエラーを引き起こしていたmallocステートメントについて何か知っていましたが、何がわからなかったのです。ありがとうございました! – Felicia

関連する問題