malloc 和 realloc 数组给出意外输出
malloc and realloc array giving unexpected output
当输入为“1 2 3 4 5 6 7 8 9 10 11”时,预期输出应与输入相同。然而输出是 '1 2 3 4 5 6 7 8 9 10 -1850774484' 。仅当输入的整数超过 10 个时才会发生。我的 realloc 行哪里出错了
#include <stdio.h>
#include <stdlib.h>
#define INITIAL_SIZE 10
int
main(int argc, char **argv){
int i = 0, num, size = 0, n = INITIAL_SIZE;
int *A;
A = malloc(n * sizeof(int));
if(A == NULL){
printf("OUT OF MEMORY\n");
exit(EXIT_FAILURE);
}
while(scanf("%d",&num) == 1 && getchar()!='\n'){
A[i] = num;
i++;
size++;
if (size >= n){
n = n * 2;
A = realloc(A,n * sizeof(int));
}
}
printf("Int Array: ");
for (i = 0; i <= size; i++){
printf("%d ", A[i]);
}
printf("\n");
return 0;
}
realloc
没有问题。您在最后一个循环中打印了一个额外的未初始化索引。通过更改
来修复它
for (i = 0; i <= size; i++)
到
for (i = 0; i < size; i++)
realloc
的唯一问题是您没有像 malloc
那样检查它是否成功。另一个问题是你没有释放分配的内存。
当输入为“1 2 3 4 5 6 7 8 9 10 11”时,预期输出应与输入相同。然而输出是 '1 2 3 4 5 6 7 8 9 10 -1850774484' 。仅当输入的整数超过 10 个时才会发生。我的 realloc 行哪里出错了
#include <stdio.h>
#include <stdlib.h>
#define INITIAL_SIZE 10
int
main(int argc, char **argv){
int i = 0, num, size = 0, n = INITIAL_SIZE;
int *A;
A = malloc(n * sizeof(int));
if(A == NULL){
printf("OUT OF MEMORY\n");
exit(EXIT_FAILURE);
}
while(scanf("%d",&num) == 1 && getchar()!='\n'){
A[i] = num;
i++;
size++;
if (size >= n){
n = n * 2;
A = realloc(A,n * sizeof(int));
}
}
printf("Int Array: ");
for (i = 0; i <= size; i++){
printf("%d ", A[i]);
}
printf("\n");
return 0;
}
realloc
没有问题。您在最后一个循环中打印了一个额外的未初始化索引。通过更改
for (i = 0; i <= size; i++)
到
for (i = 0; i < size; i++)
realloc
的唯一问题是您没有像 malloc
那样检查它是否成功。另一个问题是你没有释放分配的内存。