繁体   English   中英

使用 realloc 进行动态内存分配

[英]Dynamic memory allocation with realloc

假设我们有这样的代码:

 int *h;

 for(int i=0;i<5;i++){
     h = malloc(sizeof(int));
     h[i] = i;
 }

我在这里遇到的问题是我想从一个空数组开始,即只声明int *h ,然后*h将在运行时使用realloc增长。 我尝试使用此示例,但它没有分配顺序内存位置,也不起作用。 我知道realloc在由 malloc 分配后有效,所以有什么解决方法吗?

为了准确适应您要执行的操作, realloc(NULL, size)malloc(size)执行相同的操作。 您可以像这样编写循环:

int *h = 0;
size_t avail = 0;

for (size_t i = 0; more_data_available(); i++) {
    if ((i+1) * sizeof(int) > avail) {
        avail = avail == 0 ? 8*sizeof(int) : avail*2;
        int *nh = realloc(h, avail);
        if (!nh) abort();
        h = nh;
   }
   h[i] = next_data_item();
}

但要注意的令人费解的?:表达我不得不使用放大avail 如果我在已经分配了一些空间的情况下开始循环,那会更干净; 然后我就可以正常使用malloc

size_t avail = 8 * sizeof(int);
int *h = malloc(avail);
if (!h) abort();

for (size_t i = 0; more_data_available(); i++) {
    if ((i+1) * sizeof(int) > avail) {
        avail *= 2;
        int *nh = realloc(h, avail);
        if (!nh) abort();
        h = nh;
    }
    h[i] = next_data_item();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM