简体   繁体   English

C中简洁的动态内存分配

[英]Succinct dynamic memory allocation in C

In pseudo-code, I'd like to replace:在伪代码中,我想替换:

ra             =  (double *)  realloc(ra,   Num*sizeof(*ra));
dec            =  (double *)  realloc(dec,  Num*sizeof(*dec));
zobs           =  (double *)  realloc(zobs, Num*sizeof(*zobs));
M_B            =  (double *)  realloc(M_B,  Num*sizeof(*M_B));

with

eg mem_allocate(&ra, &dec, &zobs, &M_B)例如 mem_allocate(&ra, &dec, &zobs, &M_B)

where在哪里

mem_allocate(arg1, arg2,..., arg4){

for argi in arg1 to arg4{
     argi = (double *)  realloc(argi, Num*sizeof(*argi))

}

}

For the sake of completeness of my previous comment, an example is为了我之前评论的完整性,一个例子是

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

bool mem_allocate (double *vars[], size_t N_vars, size_t newWidth)
{
    double *temp;

    printf("\n");

    for (size_t i=0; i<N_vars; i++)
    {
        temp = realloc(vars[i], newWidth*sizeof(*temp));

        if (temp != NULL)
        {
            printf ("temp: %p\n", (void *)temp);
            vars[i] = temp;
        }
        else
        {
            return false;
        }
    }

    printf("\n");

    return true;
}

int main (void)
{
    double *var1 = malloc(sizeof(*var1));
    double *var2 = malloc(sizeof(*var2));
    double *var3 = malloc(sizeof(*var3));
    double *var4 = malloc(sizeof(*var4));

    printf ("var1: %p\n", (void *)var1);
    printf ("var2: %p\n", (void *)var2);
    printf ("var3: %p\n", (void *)var3);
    printf ("var4: %p\n", (void *)var4);

    double *vars[4];

    vars[0] = var1;
    vars[1] = var2;
    vars[2] = var3;
    vars[3] = var4;

    if (mem_allocate (vars, sizeof(vars)/sizeof(vars[0]), 200) == true)
    {
        var1 = vars[0];
        var2 = vars[1];
        var3 = vars[2];
        var4 = vars[3];

        printf ("var1: %p\n", (void *)var1);
        printf ("var2: %p\n", (void *)var2);
        printf ("var3: %p\n", (void *)var3);
        printf ("var4: %p\n", (void *)var4);
    }

    return 0;
}

Changing varx inside function mem_allocate would imply 3 star implementation, that I really don't love.在函数 mem_allocate 中更改varx将意味着 3 星实现,我真的不喜欢。

Obviously all malloc return value must be checked.显然必须检查所有malloc返回值。

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

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