本文介绍了由alloca分配的内存被在功能年底或范围月底获释?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有这样的功能:

void bla(int size) {
    while(b){
        char tmp[size];
        ......
    }
}

TMP得到的,而每次循环中解脱出来,对吧?

tmp gets freed at each iteration of the while loop, right?

如果我写这个函数:

void bla(int size) {
    while(b){
        char* tmp = alloca(size);
        ......
    }
}

TMP得到在范围年底或函数结束释放?

tmp gets freed at end of scope or at end of function?

推荐答案

它将在函数结束被释放,但既然你叫的alloca()循环内你会可能会得到堆栈溢出。如果尺寸未在函数内改变你应该叫的alloca()前循环。

It will be freed at end of function, but since you call alloca() inside the loop you'll likely get stack overflow. If size doesn't change within the function you should call alloca() before the loop.

这篇关于由alloca分配的内存被在功能年底或范围月底获释?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-01 16:41