この for ループに問題があり、クラッシュする理由がわかりません。「姓、名」形式の 20 名の入力リストを読み取り、「姓、名」の文字列として保存しようとしています。重複を配列ポインターに格納しないでください。
malloc と比較ループをコメントアウトすると、明らかにアドレスが変わらないという問題があるため、*ary は *walker と同じ値を返します。filePtr は機能し、strcpy および strcat 関数には問題はありません。また、最初の printf を削除すると、プログラムがクラッシュしますが、それを削除しても、出力以外に実際の影響はないようです。
FILE *filePtr = fopen ("input.txt","r");
int size = 20;
char **ary;
char **walker;
char **end;
int strsize = 0;
char firstname[30] = {0};
char lastname[30] = {0};
char *fullname;
ary = calloc (size, sizeof(char *));
printf("%d\n",sizeof(pAry));
for ( walker = ary ; *walker < (*end = *ary + size) ; walker++)
{
fscanf(filePtr," %s",firstname);
fscanf(filePtr," %[^\n]",lastname);
strsize = strlen(firstname) + strlen(lastname) + 3;
fullname = malloc (strsize * sizeof(char));
strcpy(fullname,lastname);
strcat(fullname,", ");
strcat(fullname,firstname);
for ( compare = 0 ; compare < walker ; compare++)
{
if(strcmp(fullname,*(ary + compare)) != 0)
{
diff = 0;
}
}
if (diff)
{
strncpy(*walker,fullname,strsize);
printf("%s\n",*walker);
}
free(fullname);
}