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.
Большое спасибо!