1
私が代わりに、文字列などの入力ファイルをソートするために挿入ソートコードをソート私の電話番号を適応しようとしている:はCで挿入ソートと文字列のソート - セグメンテーションフォールト
thickness
combed
revocable
escorted
私はセグメンテーションフォールトを取得しますが(コア以下を実行しようとしたときにダンプ):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STRING_LEN 80
#define ARRAY_LEN 10000
void insertion_sort(char **a, int n) {
int i;
int j;
char *key;
for (i = 1; i < n; i++) {
key = a[i];
j = i - 1;
while (strcmp(key, a[j]) == -1 && j >= 0) {
a[j + 1] = a[j];
j = j - 1;
}
a[j + 1] = key;
}
}
void *emalloc(size_t s) {
void *result = malloc(s);
if (NULL == result) {
fprintf(stderr, "Memory allocation failed!\n");
exit(EXIT_FAILURE);
}
return result;
}
int main(void) {
int j;
int num_words = 0;
char word[STRING_LEN];
char *wordlist[ARRAY_LEN];
while (num_words < ARRAY_LEN && 1 == scanf("%79s", word)) {
wordlist[num_words] = emalloc((strlen(word) + 1) * sizeof wordlist[0][0]);
strcpy(wordlist[num_words], word);
num_words++;
}
insertion_sort(wordlist, num_words);
for (j = 0; j < num_words; j++) {
printf("%s\n", wordlist[j]);
}
return EXIT_SUCCESS;
}
を私は> 0
代わりの>= 0
while
条件を変更して見つけました
j
が0
で、ループに入ると、出力されていないときに、これがあるとしてそれは、最初の文字列以外のすべてを並べ替え:
thickness
combed
escorted
revocable
私はCに新たなんだと、私はこれが集まります割り当てられていないメモリにアクセスすることに関連していますが、私はどこを見るのが苦労しています。
今日はすべての8気筒で打っています! –
@ DavidC.Rankin:もっと重要な仕事を先延ばしすることは、非常に効果的な動機です。 ';-) ' – chqrlie
@yhsdygdyusgdysgdsudsd:回答スコアの下にある灰色のチェックマークをクリックしてこの回答を受け入れることができますか? – chqrlie