- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在尝试访问 pthread_join 的第四个参数时遇到段错误。这是我的代码:
void* threadHandler(void* arg)
{
printf("arg: %c\n", *(char *) arg);
pthread_exit(0);
}
int main()
{
pthread_t threadA;
pthread_create(&threadA, NULL, threadHandler, "N");
void *retval;
pthread_join(threadA, &retval);
printf("retval: %d\n", *(int *) retval);
return 0;
}
知道为什么最后一个 printf 会导致段错误吗?我如何解决它? (我的理解是retval应该包含threadHandler的返回值,所以在这种情况下,它应该是0,对吧?)
提前致谢!
最佳答案
如果您了解 pthread_join()
将选择线程回调的返回值,那么您应该像这样返回
#include <stdio.h>
#include <stdint.h>
#include <pthread.h>
void *
threadHandler(void *data)
{
printf("arg: %s\n", (char *) data);
return (void *) 0;
}
int
main(void)
{
pthread_t thread;
const char *string;
void *number;
string = "N";
if (pthread_create(&thread, NULL, threadHandler, (void *) string) != 0)
return -1;
pthread_join(thread, &number);
printf("%d\n", ((int) (intptr_t) number));
return 0;
}
但请注意,返回的地址 0x00
可能不是有效地址 - 通常是 NULL
指针 (void *) 0x00
code> - 因此,只要您有兴趣使用指针的值作为要返回的整数,您就应该这样做。
取消引用指针是未定义行为,但使用值则不是。
关于c - pthread_join void **retval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37345714/
假设我有这段代码 def retval # some resource intensive computation return whatever end def foo ... re
我很难理解以下代码为何具有2种不同的行为: pub fn get(&self, idx: usize) -> &T { let arr = unsafe { core::slice::from
我正在尝试为 start 和 stop 服务的脚本创建一个模板。我正在检查 tomcat 启动和停止的模板并查看命令 RETVAL=$?。 这是做什么的?我应该保留它吗?顺便说一句,我的脚本在下面,以
我得到这个 Valgrind 输出(这是我得到的唯一错误): ==20627== Conditional jump or move depends on uninitialised value(s)
我在尝试访问 pthread_join 的第四个参数时遇到段错误。这是我的代码: void* threadHandler(void* arg) { printf("arg: %c\n", *(ch
我在尝试访问 pthread_join 的第四个参数时遇到段错误。这是我的代码: void* threadHandler(void* arg) { printf("arg: %c\n", *(ch
[in]、[out]、[in, out] 和 [out, retval] 有什么区别 ? 从我读过的一些代码来看,我认为 [in] 用于将参数传递给一个方法。 [out, retval]就是返回一个值
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我正在扫描字符串对象数组,每个字符串对象将被分解为一个正则表达式。 当进行增强的 for 循环时,我想知道是否可以将 retval 放入数组中? 例如,如果我有 String regex = new
我正在尝试使用 clang 3.6 和 -Weverything 编译一个 C 文件,但它在我的 Doxygen 注释中失败,其中包含 \retval 标记。 我的代码是这样的: /*********
我有以下内容: void *Thrd(void *data) { int ret; ret = myfunc(); pthread_exit((void *)ret); } i
我目前正在使用 Diab 4.4 C++ 编译器。这是一个完整的 POS,不符合 ANSI,我过去发现过它的问题。 我想知道下面的问题是编译器的问题,还是我对C++知识的不足 我意识到 x = x &
我想写一个这样的 C++ 函数: #include std::errc f() { return std::errc::success; } 但我无法理解如何使用 std::errc 'enum c
我很难理解为什么 pthread_join 的 retval 参数是 void**。我已经阅读了联机帮助页并试图全神贯注,但我仍然无法完全理解它。我无法说服自己 retval 不能是 void*。有哪
我很难理解为什么 pthread_join 的 retval 参数是 void**。我已经阅读了联机帮助页并试图全神贯注,但我仍然无法完全理解它。我无法说服自己 retval 不能是 void*。有哪
我正在尝试使用 papi 进行测试,但遇到一些错误,我不明白为什么会发生这些错误。我在网上找不到任何适合他们的东西。代码如下 我正在使用PAPI和C。 #include #include #inc
我一直在寻求改进和应用最佳实践。在过去的几周里,我读了很多关于重构的文章。我不得不处理很多糟糕的代码,我也制作了一些不太好的东西,但我正在努力改变它。这对大多数语言来说都没有问题,但我对 PL/SQL
我有一个现有的接口(interface) API,它有一个 OUT、RETVAL 参数,如下所示 HRESULT Test([out, retval] VARIANT_BOOL *pVal); 我被要
我有一个返回结构(不是结构指针)的函数,但是当试图将返回值设置为相同类型的结构变量时,我得到“不兼容的类型”。 这是结构定义和函数实现的样子: typedef struct{ int ssn;
我正在尝试更新现有的 COM API 以包含新的可选输出参数,但遇到了 IDL 文件和关联的 C++ 头文件中参数类型强制排序的问题。 以前我有一个像这样的 IDL 文件(为了保护无辜者更改了名称):
我是一名优秀的程序员,十分优秀!