我一直试图理解为什么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)