gpt4 book ai didi

c - 如何使用alloca分配C函数指针?

转载 作者:太空宇宙 更新时间:2023-11-04 05:30:43 25 4
gpt4 key购买 nike

C 一直是个谜!

我正在实现工作组线程执行模型,在该模型中我尝试使用 alloca 作为更快的内存分配选项。在尝试使用 alloca 通过存储在堆栈上的函数指针执行代码时,我遇到了一个奇怪的段错误。

这是导致类似段错误的牙签代码:

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

typedef void* (*foo)(void*);

typedef struct task
{
foo f;
} task;

void *blah(void* v)
{
printf("addr:%p\n", &v);
return v;
}

int main()
{
void *queue[10];

task *t = (task*) alloca (sizeof(task));
// No null check, excuse me!
t->f = blah;

queue[0] = (void*)t;
char string[10] = "Bingo!";
char *c = &string[0];

task *tnew = (task*)&queue[0];
tnew->f((void*)c);

return 0;
}

当我执行上面的代码时,我在 tnew->f() 行遇到了一个段错误。GDB 回溯对我帮助不大。

请解释上面代码中的错误..我是第一次使用alloca.

非常感谢!

最佳答案

改变这一行:

task* tnew = (task*)&queue[0];

task* tnew = (task*)queue[0];

因为queue[0]已经是一个指针;您不需要获取它的地址。您在 blah 中遇到了同样的问题。您的 printf 不会崩溃,但它会打印出指针的地址,而不是指针的值,这可能不是您想要的。

关于c - 如何使用alloca分配C函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6880546/

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