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を使用しています。
どうもありがとうございます!