nan*_*ndu 0 c function-pointers alloca
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;
}
Run Code Online (Sandbox Code Playgroud)
当我执行上面的代码时,我在tnew-> f()行得到了一个分段错误.GDB回溯对我没什么帮助.
请解释上面代码中的错误..我是第一次使用alloca.
非常感谢你!
改变这一行:
task* tnew = (task*)&queue[0];
Run Code Online (Sandbox Code Playgroud)
至
task* tnew = (task*)queue[0];
Run Code Online (Sandbox Code Playgroud)
因为queue[0]已经是一个指针; 你不需要拿它的地址.你里面有同样的问题blah.你printf不会崩溃,但它会打印出指针的地址,而不是指针的值,这可能不是你想要的.