【发布时间】:2012-02-07 14:49:41
【问题描述】:
看到这个帖子我写了以下内容:How do I convert from void * back to int
#include <iostream>
#include <stdlib.h>
using namespace std;
int main (int argc, char *argv[])
{
void* port = (void*) atoi (argv[1]);
cout << "\nvalue: \n" << atoi (argv[1]) << "\n";
int h = *((int *)port);
cout << h;
}
输出:
anisha@linux-dopx:~/> ./a.out 323
value:
323
Segmentation fault
anisha@linux-dopx:~/>
海合会
我错过了什么?
【问题讨论】:
-
我认为从 int 转换为 void* 根本不是故意的。由于位置 323 处未分配的内存,当您尝试取消引用 void* 时,仅此一项就会导致段错误。
-
@ksming 要更改哪一行?
-
与您链接到的问题的不同之处在于,从 int* 转换为 void*,因此您应该转换回 int*。您执行从 int 到 void* 的转换,因此在这种情况下您应该转换回 int。但是,请尽量避免这种转换。
-
如果您需要它来创建线程,请参阅我对 Luchian 的回答的评论,以完全避免强制转换。
标签: c++ segmentation-fault void void-pointers