我不确定我是否正确使用了realloc功能。
在我的程序中,我首先询问用户数组的大小,并使用malloc为它分配内存,然后用一些值初始化它。
然后我想使用realloc将相同的数组制作两倍大小。这是我的代码。我使用realloc来正确调整int * A的大小吗?
#include <stdio.h>
#include <stdlib.h>
int main(){
int n;
printf("Enter size of array\n");
scanf("%d", &n);
int *A = (int*)malloc(n*sizeof(int)); //dynamically allocated array
for (int i = 0; i < n; i++) //assign values to allocated memory
{
A[i] = i + 1;
}
A = (int*)realloc(A, 2*sizeof(int)); //make the array twice the size
free(A);
}
答案 0 :(得分:1)
malloc()
时,请不要投放返回值as said here int *A = (int*)malloc(n*sizeof(int));
,malloc
的尺寸为n*sizeof(int)
。如果您想要两倍的尺寸,则应使用realloc()
代替n*sizeof(int)*2
2*sizeof(int)
realloc()
失败。如果realloc(A, new_size)
失败,A == NULL
您将有内存泄漏。因此,使用不同的指针B
,检查if (B != NULL)
然后分配A = B
(old_size = new_size)。如果B == NULL
处理分配失败答案 1 :(得分:1)
在这种情况下,在malloc之前将n加倍是很容易的,所以你没有使用realloc,因为你知道,你要加倍数组化。使用realloc可以减慢程序的工作速度,因为如果你把它做得更长,并且在当前分配的内存之后的地址不是空闲的,那么整个数组将被移动。你也可以按照我之前的建议更改最后一行。