【发布时间】:2014-10-14 20:21:50
【问题描述】:
我是 C 新手,我正在使用 memset。
从我读到的memset 用字符替换了部分内存。
当我尝试这样做时,我的程序会关闭并使用断点,它会在 memset 行之后停止。不太清楚为什么。
void init_TCB (struct TCB_t *tcb, void *function, void *stackP, int stack_size)
{
memset(tcb, '\0', sizeof(struct TCB_t));
getcontext(&tcb->context);
tcb->context.uc_stack.ss_sp = stackP;
tcb->context.uc_stack.ss_size = (size_t)stack_size;
makecontext(&tcb->context, function, 0);
}
sizeof(struct TCB_t) 是 957,tcb 是 struct 的内存位置,'\0' 是 char。
这是结构`
struct TCB_t
{
struct TCB_t * next;
struct TCB_t * previous;
ucontext_t context;
};
这里是我初始化结构的地方
void start_thread(void (*function)(void))
{
struct stack * stackP = (struct stack*)malloc(sizeof(struct stack));
struct TCB_t * tcb = (struct TCB_t *)(sizeof(struct TCB_t));
init_TCB (tcb, function, stackP, 8192);
ptr = create_list();
add_to_list( ptr);
}
【问题讨论】:
-
告诉我们
getcontext。 -
这一切都取决于函数被调用时
tcb指向什么。 -
memset看起来不错,根据您提供的少量信息,除非指针值tcb并没有真正指向正确分配的struct TCB_t(您没有显示分配,很难说)。您还没有展示如何定义TCB_t,因此对getcontext(&tcb->context);的调用可能存在问题。 -
getcontext 是对 ucontext_t 库的内部调用
-
你没有为
tcb分配任何东西你只是在创建一个指向某处的指针