小编jac*_*ver的帖子

valgrind错误和ucontext.为什么"使用8英寸的未初始化值"?

我一直试图理解为什么valgrind抱怨使用ucontexts的小型测试程序"使用8号未初始化的值".它基本上是一个创建"n_ucs"ucontexts并在"max_switch"时间内切换它们的程序.

我理解"警告:客户端切换堆栈?" (这基本上就是程序的全部内容),但我对所有"使用未初始化的8号值"都没有意义

我想得到一些帮助,了解Valgrind错误是否为误报,或者该程序是否存在根本错误.(我在一个使用相同机制的更大的程序中看到了很多它们,但是我把它提炼到最低限度以便在这里发布).

任何帮助表示赞赏.

谢谢,

插口

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <ucontext.h>

#define STACK_SIZE   (8*1024)

int n_ucs = 1;
int max_switchs = 10;
int n_switchs = 0;
int tid = 0;

ucontext_t *ucs;
static ucontext_t engine_uc;

static void func(int arg)
{
    while (n_switchs < max_switchs) {
        int c_tid = tid;
        int n_tid = (tid + 1) % n_ucs;
        n_switchs++;
        tid = n_tid;
        swapcontext(&ucs[c_tid], &ucs[n_tid]);
    }
}

int main(int argc, char **argv)
{
    if (argc > 1)
        n_ucs …
Run Code Online (Sandbox Code Playgroud)

c linux valgrind ucontext

8
推荐指数
1
解决办法
1629
查看次数

标签 统计

c ×1

linux ×1

ucontext ×1

valgrind ×1