gpt4 book ai didi

构造指向 alloca 的函数指针会导致链接器错误?

转载 作者:太空狗 更新时间:2023-10-29 15:47:17 27 4
gpt4 key购买 nike

我正在尝试编写一个函数,该函数传递一个函数以用于分配作为其参数;它应该接受类型为 void *(*)(size_t) 的任何有效分配器。但是,当我尝试使用 alloca 作为分配器时,我遇到了奇怪的行为 - 构造一个指向 alloca 函数的函数指针可以正常编译,但会导致链接器错误:

#include <stdlib.h>
#include <alloca.h>

int main() {
void *(*foo)(size_t) = alloca;
}

结果

/tmp/cc8F67yC.o: In function `main':
test15.c:(.text+0x8): undefined reference to `alloca'
collect2: error: ld returned 1 exit status

这与内联 alloca 有关系吗?但是,当函数不需要地址时,内联不会仅作为优化来完成。事实上,有了 GCC,我什至可以编写自己的版本,在上面的代码中按预期工作:

static inline void *alloca(size_t n) {
return __builtin_alloca(n);
}

标准版本的行为方式不同是否有原因?

最佳答案

谁说你的功能

static inline void *alloca(size_t n) {
return __builtin_alloca(n);
}

有效吗?由 __builtin_alloca 分配的对象在函数结束时满足其生命周期,因此一旦您返回它,您就已经有了一个悬空指针!

关于构造指向 alloca 的函数指针会导致链接器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55177353/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com