getaddrinfo()上的Seg错误
Seg Fault on getaddrinfo()
我的getaddrinfo调用出现分段错误,无法找出原因。它发生在我的服务器和客户端上。某些代码(服务器端(是-
class TcpServer {
public:
TcpServer(int);
~TcpServer();
void launchServer();
void communicate();
private:
const char* port;
int fd;
int comm_fd;
};
在tcpserver.cpp-中
void TcpServer::launchServer() {
int status;
struct addrinfo hints;
struct addrinfo *servinfo; //will point to the results
//store the connecting address and size
struct sockaddr_storage their_addr;
socklen_t their_addr_size;
//socket infoS
memset(&hints, 0, sizeof hints); //make sure the struct is empty
hints.ai_family = AF_INET; //local address
hints.ai_socktype = SOCK_STREAM; //tcp
hints.ai_flags = AI_PASSIVE; //use local-host address
//get server info, put into servinfo
if ((status = getaddrinfo("127.0.0.1", port, &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo error: %sn", gai_strerror(status));
exit(1);
}
主要-
TcpServer server(4950);
server.launchServer();
传递给构造函数的int
被广播到端口的const char*
。
当我运行gdb时,它会给我一个-的回溯
#0 0xb7dca737 in getaddrinfo (name=0x8054824 "127.0.0.1",
service=0x1356 <Address 0x1356 out of bounds>, hints=0xbffff20c,
pai=0xbffff234) at ../sysdeps/posix/getaddrinfo.c:2080
#1 0x08050f79 in TcpServer::launchServer (this=0xbffff304) at tcpserver.cpp:25
#2 0x0804eae9 in main (argc=1, args=0xbffff3f4) at mainserver.cpp:47
所以"地址0x1356越界"让我相信端口出了问题,但我不知道可能出了什么问题。如果有人能指出错误的地方,我将不胜感激。谢谢你的帮助。
getaddrinfo("127.0.0.1", port, &hints, &servinfo)
^
那应该是char *
。我猜您正在传递一个整数,并强制库访问一个无效地址。
编辑
根据Blagovest Buyukliev的评论,我相信你在构造函数this->port = (const char*) port
中做了这样的事情。
您需要使用一些东西(可能是snprintf
?(将该整数转换为char *
。简单地铸造是不行的。
是否应该通过引用而不是值传递port
,即&port
?0x1356与4950的值相同,4950是您尝试使用的端口号。
edit:好吧,我认为它应该是一个字符串,而不是指针对int。我将保留我的答案,因为它显示端口值被错误地解释为地址。
您正在设置一个指向端口的指针,但没有为它分配内存。(至少我在您列出的代码中看不到。(
端口应该是一个字符串(即char数组(,而不是指向char的指针。也不是整数。
相关文章:
- C++ - 将元素按升序插入数组的 SEG 错误
- 为什么我在使用 istream 迭代器时会出现 seg 错误?
- 字符串上的合并排序上的 Seg 错误
- 导致 Seg 错误的 SingleLinkedList 的析构函数
- g++ 9.2.1 (Linux) 会导致 seg 错误,但 Windows 上的代码块不会
- 函数抛出seg错误,我不知道为什么
- Microsoft Visual Studio 2019交叉编译CMake库 - 有效,但存在SEG错误
- 由于相同的文件名/类名存在于不同的SO中而导致的SEG错误
- 尝试访问 3D 矢量中的元素时出现 Seg 错误
- 垫子对象数组太大会导致 Seg 错误
- 为什么push_back成矢量<矢量<int>>导致 seg 错误?
- 在向量中存储字符串存在 SEG 错误
- 更改本地类名时出现 seg 错误
- 使用 ->GetString( " ") 时出现 Seg 错误,它位于单独的类中
- 将字符数组转换为 std::string 以传递到 std::bitset seg 错误
- 字符和 int 连接何时会导致 seg 错误?
- 静态数组溢出堆栈(seg 错误 11)仅在类定义内部时,否则不会..?
- .EOF 在读取文件时导致 Seg 错误:FIXXED
- 在 qt5 中使用 QSharedPointer 时出现 Seg 错误
- 为什么我的 if 语句会出现 seg 错误?