ファイルから整数を読み取っていて、配列を拡張しようとすると、 への2 回目の呼び出しでgrowMyArray(struct myArray)
、特に でセグメンテーション エラーが発生しint *grownArray = malloc(arrayToGrow.maxCount * sizeof(int));
ます。
struct myArray growMyArray(struct myArray arrayToGrow) {
arrayToGrow.maxCount *= 2;
int *grownArray = malloc(arrayToGrow.maxCount * sizeof(int));
int i;
for (i = 0; i < arrayToGrow.count; i++)
grownArray[i] = arrayToGrow.numbers[i];
free(arrayToGrow.numbers);
arrayToGrow.numbers = grownArray;
return arrayToGrow;
}
私の構造:
typedef struct myArray {
int count;
int maxCount;
int *numbers;
} myArray;
入力リダイレクトからの読み取り:
struct myArray getRandomNumbers() {
struct myArray randomNumbers;
randomNumbers.count = 0;
randomNumbers.maxCount = DEFAULT_SIZE;
randomNumbers.numbers = malloc(randomNumbers.maxCount * sizeof(int));
while (scanf("%d", &randomNumbers.numbers[randomNumbers.count]) == 1) {
randomNumbers.count++;
if (randomNumbers.count > randomNumbers.maxCount)
randomNumbers = growMyArray(randomNumbers);
}
return randomNumbers;
}
配列の拡張は常に最初は機能しますが、2 回目は機能しないため、これは特に奇妙に感じます。DEFAULT_SIZE
サイズ 200000 のテスト データのセットで 2 から 20000 までの範囲の複数の値を に使用しました。
への2 回目の呼び出しgrowMyArray
、特に でのセグメンテーション エラーが発生する明らかな理由はありint *grownArray = malloc(arrayToGrow.maxCount * sizeof(int));
ますか?