Dav*_*ski 0 c malloc segmentation-fault
我正在从一个文件中读取整数,当我尝试增长我的数组时,我在第二次调用时遇到了分段错误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;
}
Run Code Online (Sandbox Code Playgroud)
我的结构:
typedef struct myArray {
int count;
int maxCount;
int *numbers;
} myArray;
Run Code Online (Sandbox Code Playgroud)
从输入重定向读取:
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;
}
Run Code Online (Sandbox Code Playgroud)
我发现这特别奇怪,因为增长阵列总是第一次起作用但第二次不起作用.我DEFAULT_SIZE在一组大小为200000的测试数据上使用了多个值,范围从2到20000.
是否有明显的原因导致我在第二次调用时遇到分段错误growMyArray,特别是在int *grownArray = malloc(arrayToGrow.maxCount * sizeof(int));?
你写过数组的末尾.
while (scanf("%d", &randomNumbers.numbers[randomNumbers.count]) == 1) {
randomNumbers.count++;
if (randomNumbers.count > randomNumbers.maxCount)
randomNumbers = growMyArray(randomNumbers);
}
Run Code Online (Sandbox Code Playgroud)
因为您>在测试中使用,所以if只触发一次randomNumbers.count = randomNumbers.maxCount + 1,即scanf写入randomNumbers.numbers[randomNumbers.maxCount]超过数组末尾的写入.
因此,改变>以>=在if声明中出现.
| 归档时间: |
|
| 查看次数: |
437 次 |
| 最近记录: |