如何在C中本地分配数组指针?

时间:2012-02-02 23:28:53

标签: c memory-management malloc local

想一下指针数据类型,例如浮点指针数。

typedef float* flPtrt;

如何在本地范围内分配3个元素的数组?我想使用mallocfree使用相同的范围会产生开销,但还有什么选择呢?

void foo() {
    flPtrt ptr = malloc(sizeof(float)*3);
    // ...
    free(ptr);
}

4 个答案:

答案 0 :(得分:2)

如果3在编译时已知并且足够小,则可以声明一个本地数组并将其用作指针

void foo() {
    float array[3];
    flPtrt ptr = array;
}

如果尺寸较大或可变,则必须使用动态记忆,如示例所示。

答案 1 :(得分:1)

如果您提前知道所需的数组大小,则可以将其分配为堆栈变量并避免堆内存管理。

否则,您概述的方法是合适的,并没有其他选择。

答案 2 :(得分:1)

使用数组。

void foo(void) // note that "void foo()" is obsolete
{
    float data[3];
    float *ptr = data;
    // ...
}

答案 3 :(得分:1)

我认为你所寻找的是alloca()功能。 我不确定它是标准的C,但它存在于GNU中,它在我的视觉工作室中运行。 所以这就是你如何使用它:

int n = 5;
int* a = (int*) alloca(sizeof(int) * n);

它在堆栈上创建一个元素数组(而不是在具有malloc的堆上)。 优点:开销更少,无需手动释放(当您从方法返回时,堆栈折回并且内存丢失) 缺点:如果你想从一个方法返回一个指针从不使用alloca,因为你将指向退出函数后不再存在的东西。人们还可以争辩说堆栈通常比堆小,所以如果你想要更大的空间使用malloc。 查看更多here