- 此问题在此处已有答案**:
dynamic memory allocation in c , free some part of memory that is allocated before using malloc()(2个答案)
4天前关闭。
我需要创建一个向量,在声明时我不知道它的分量数,例如,假设向量包含小于给定n
的素数,在实际计算它们之前我不知道有多少个。
每当我用malloc
分配内存时,我知道内存可以稍后用free
释放:
int main(int argc, char** argv)
{
int* p=malloc(4*sizeof(int));
for(int j=0; j<4; j++)
{
*(p+j)=2*j;
}
printf("%d %d %d %d\n", *p, *(p+1), *(p+2), *(p+3));
free(p);
return 0;
}
我的想法是分配比我所需更多的内存,然后只释放其中的一部分。我很天真地想做int* p=malloc(1000*sizeof(int))
这样的事情(假设我确信p
将具有少于1000个组件)然后使用free(p+j)
,其中j
是,在计算之后,我给p
的,有意义分量的个数,但这是不允许的。
当然,总有可能使用struct
创建一个列表,然后只在末尾创建数组,但我不喜欢这种解决方案,我觉得它很复杂。
当我在声明时只知道数组大小的上限,并且数组的大小只能在最后确定时,创建数组的正确方法是什么?
1条答案
按热度按时间hjzp0vay1#
使用
free(p+j)
无效,因为只能将malloc
、calloc
、realloc
或aligned_alloc
返回的指针传递给free
。说到
realloc
,这正是您用来调整已分配内存大小的方法:请注意,您需要将返回的指针保存在一个单独的变量中,以防
realloc
失败,在这种情况下,原始指针仍然有效。