swapcontext()分段错误

时间:2012-03-19 01:33:47

标签: c segmentation-fault

我正在尝试使用swapcontext()

创建一个简单的hello world示例

以下是代码段:

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

static ucontext_t uctx_main, uctx_func1;

typedef struct test_struct 
{
    ucontext_t  context;
    int value;
}test_struct;

test_struct* array[10];

static void
func1(void)
{
    printf("func1: started\n");
    printf("func1: TESTING\n");
    printf("func1: returning\n");
}
void init()
{
    memset(array,NULL,10);

    array[0] = (test_struct*)malloc(sizeof(test_struct));
    array[0]->value = 10;

    getcontext(&array[0]->context);

    char* func1_stack = (char*)malloc(sizeof(char)*64);
    //char func1_stack[64];

    array[0]->context.uc_stack.ss_sp = func1_stack;
    array[0]->context.uc_stack.ss_size = 64;
    array[0]->context.uc_link = &uctx_main;

    makecontext(&array[0]->context, func1, 0);
}

int main(int argc, char *argv[])
{
   init();

   printf("VALUE: %d\n",array[0]->value);

   swapcontext(&uctx_main, &array[0]->context);

   printf("VALUE: %d\n",array[0]->value);
   printf("main: exiting\n");
   exit(0);
}

但问题是当程序执行swapcontext()时会发生分段错误。我已经摆弄了一下,我发现问题是我分配给上下文的堆栈大小,但我不知道我做错了什么。

P.S。我尝试过分配sizeof(func1_stack)但仍然遇到了段错误

任何人都可以给我一个提示吗?

0 个答案:

没有答案