在运行时使用 realloc 将数组大小加倍。我的代码正确吗?
Using realloc to double an arrays size during runtime. Is my code correct?
我不确定我是否正确使用了 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);
}
- 使用
malloc()
时,不要转换 return 值 as said here
- 您使用的尺寸不正确。这里
int *A = (int*)malloc(n*sizeof(int));
给malloc
的大小是n*sizeof(int)
。如果你想要两倍的大小,你应该用 n*sizeof(int)*2
调用 realloc()
而不是 2*sizeof(int)
- 处理
realloc()
失败。万一 realloc(A, new_size)
失败, A == NULL
并且您将发生内存泄漏。因此,使用不同的指针 B
,检查 if (B != NULL)
,然后分配 A = B
(old_size = new_size)。如果B == NULL
处理分配失败
在这种情况下,在 malloc 之前将 n 加倍更容易,因此您无需使用 realloc,因为您知道,您将加倍数组大小。使用 realloc 会减慢程序的运行速度,因为如果你让它变长,并且当前分配的内存之后的地址不是空闲的,那么整个数组将被移动。您还按照我之前的建议更改了最后一行。
我不确定我是否正确使用了 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);
}
- 使用
malloc()
时,不要转换 return 值 as said here - 您使用的尺寸不正确。这里
int *A = (int*)malloc(n*sizeof(int));
给malloc
的大小是n*sizeof(int)
。如果你想要两倍的大小,你应该用n*sizeof(int)*2
调用realloc()
而不是2*sizeof(int)
- 处理
realloc()
失败。万一realloc(A, new_size)
失败,A == NULL
并且您将发生内存泄漏。因此,使用不同的指针B
,检查if (B != NULL)
,然后分配A = B
(old_size = new_size)。如果B == NULL
处理分配失败
在这种情况下,在 malloc 之前将 n 加倍更容易,因此您无需使用 realloc,因为您知道,您将加倍数组大小。使用 realloc 会减慢程序的运行速度,因为如果你让它变长,并且当前分配的内存之后的地址不是空闲的,那么整个数组将被移动。您还按照我之前的建议更改了最后一行。