【发布时间】:2023-01-21 03:54:30
【问题描述】:
我需要创建一个向量,在声明时我不知道其组件数量。例如,假设该向量将包含给定 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 创建一个列表,并只在最后创建数组,但我不喜欢这种解决方案,这对我来说似乎很复杂。
当我在声明时只知道其大小的上限时,创建数组的正确方法是什么,以防数组的大小只会在最后确定?
【问题讨论】:
-
这回答了你的问题了吗? dynamic memory allocation in c , free some part of memory that is allocated before using malloc()。
realloc可能是您正在寻找的选项。 -
假设您猜到了
N素数并且猜到了int *p = malloc(N * sizeof *p)。如果你只使用M的元素,你可以稍后做p = realloc(p, M * sizeof *p); -
如果你想减少以前用
malloc分配的内存块的大小,你可以使用realloc,给它新的、更小的大小。保留初始部分,但请注意地址可能会更改。
标签: c