gpt4 book ai didi

c - 断言调用段错误

转载 作者:行者123 更新时间:2023-11-30 15:45:29 25 4
gpt4 key购买 nike

我编写了某种基本的多线程库。因此,对于每个线程,我都有一个上下文 (ucontext_t)。在我的一个测试程序中,我放置了一个失败的断言。它没有使用行号中止,而是引发了段错误。然后我检查并看到上下文的堆栈大小为 8192。当我将其增加到 16394 时,断言失败按预期工作。

有人能告诉我断言内部是如何工作的以及为什么它会占用这么多字节吗?我相信 8192 对于我的上下文来说是一个相当大的尺寸。

这就是我的线程的创建方式

MyThread *temp;
temp=malloc(sizeof(MyThread_t));
ucontext_t tempContext;
if (getcontext(&tempContext) == -1)
temp->ThreadId = 0;
tempContext.uc_stack.ss_sp = (char *)malloc(SIZE_STACK*sizeof(char));;
tempContext.uc_stack.ss_size = SIZE_STACK*sizeof(char);
tempContext.uc_link = NULL;
makecontext(&tempContext,(void(*)(void))start_funct,1, args);

我的测试函数就是这样的。

T = MyThreadCreate(t0, (void *)n2);
re=MyThreadJoin(T);
printf("%d\n",re);
assert(re==-1);

re 值为 0。当我的 SIZE_STACK 为 8192 时,出现段错误。当它增加到 16384 时,正如断言所预期的那样,这是一个正确的中止。

最佳答案

assert 的实现依赖于平台。

关于c - 断言调用段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19020748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com