になります。これは私のコードです:./a.out rome turin rome milan venice milan florence
:印刷コマンドライン引数は、セグメンテーションフォールト
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int isPresent(char *array[], char *string, int dimension) {
for (int i=0; i<dimension; i++) {
if (strcmp(array[i], string) != 0) {
continue;
} else {
return 1;
}
}
return 0;
}
int main(int argc, char *argv[]) {
int dim = 0;
char **without_duplicates = malloc(dim * sizeof(char *));
for (int i=1; i<argc; i++) {
if (!isPresent(without_duplicates, argv[i], dim)) {
realloc(without_duplicates, (dim + 1) * sizeof(char *));
without_duplicates[dim] = malloc((strlen(argv[i]) + 1) * sizeof(char));
strcpy(without_duplicates[dim], argv[i]);
printf("%s\n", without_duplicates[dim]);
dim++;
} else {
continue;
}
}
printf("%s\n", "Not duplicated arguments:");
for (int i=0; i<dim; i++) {
printf("%s\n", without_duplicates[i]);
}
return 0;
}
私はコードを実行します。 しかし、セグメンテーションフォールトエラーを取得します。
コードをデバッグしようとしましたが、ある時点まで動作します。 たとえば、rome
、turin
、rome
、コピーmilan
を破棄しますが、venice
と他の都市はコピーしません。
一部の都市では、他の都市では使用できません。 プログラムに予期しない動作が発生し、異なる引数を使用して異なるポイントでクラッシュします。
引数の数とその長さがわからないので、重複のない新しい配列を動的に割り当てる必要があります。あなたのコードで
['realloc '](http://en.cppreference.com/w/c/memory/realloc)。正しく使用していません。その戻り値には理由があります。リンクされた参照にはサンプルが含まれますが、戻り値を無視するものではなく、偶然ではありません。 – WhozCraig
['malloc'](http://en.cppreference.com/w/c/memory/malloc)の詳細については、ゼロ以外のポインタを返すかどうかをゼロの量で割り振るかどうかは実装定義です。 –