<分区>
我正在尝试复制动态分配数组中的整数数组。一开始它的大小为 1,对于每个元素我都想将它的大小增加一个。
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *nr,i;
nr=(int *)malloc(1*sizeof(int));
for(i=1; i<1000; i++)
{
nr[i]=i;
nr=(int *)realloc(nr,i*sizeof(int));
}
for(i=1; i<1000; i++)
printf("%d \n", nr[i]);
return 0;
}
谢谢!
此处:nr=(int *)malloc(1*sizeof(int));
您只分配了 4 个字节,但在您的 for 循环中,您随后写入了 4000 个字节,其中 3996 个字节在未分配给您的内存中。你正在做的 realloc 没有做任何事情,因为你仍然只要求 4 个字节。
杀掉realloc,只在开头分配1000*sizeof(int)
为您的编辑而编辑:
因为您的循环来自 i=1
,所以在第一次迭代中您要写入字节 4-7 而不是 0-3,因此您需要从 i=0
。但是你的 realloc 也是错误的,因为即使在你的循环中你也在分配 1*sizeof(int)
,这意味着你仍然是一个短缺。您需要从 int i=0 循环并使用 (i+2)*sizeof(int)
重新分配。
但是
不要在循环中重新分配,malloc 和 realloc 非常慢。如果你用大量的真实问题来做这件事,你就会在这里遇到瓶颈。分配一次,使用它。即使你不能那样做,在一个循环中计算你需要多少空间,做一个单独的 malloc,然后使用另一个循环来填充它,它会明显更快。