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



考虑一个指针数据类型,例如一个浮动指针数字。

typedef float* flPtrt;

如何在本地作用域中分配一个由3个元素组成的数组?我想在同一范围内使用mallocfree会产生开销,但有什么替代方案呢?

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

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

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

如果大小更大或可变,则必须像示例中那样使用动态内存。

我想您想要的是alloca()函数。我不确定它是标准C,但它存在于GNU中,它在我的视觉工作室中工作过。这就是你使用它的方式:

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

它在堆栈上创建一个元素数组(而不是在带有malloc的堆上)。优点:开销更少,无需手动释放(当您从方法返回时,堆栈会折叠回来,内存也会丢失)缺点:如果你想从一个方法返回一个指针,千万不要使用alloca,因为在退出函数后,你将指向不再存在的东西。也可以说堆栈通常比堆小,所以如果您想要更大的空间,请使用malloc。点击此处查看更多信息

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

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

使用数组。

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

相关内容

  • 没有找到相关文章