#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
int main(int argc, char *argv[]){
int sockfd;
struct sockaddr_in serv_addr;
struct hostent *hp;
char buff[100];
//Create socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd < 0){
perror("Failed to create socket!");
exit(1);
}
serv_addr.sin_family = AF_INET;
hp = gethostbyname(argv[1]); *
我认为错误可能在上面一行,但我不知道如何解决 此
当我在Geany,Linux中编译,构建和运行此代码时,我收到了分段错误错误消息。为什么会这样,我该如何解决?
答案 0 :(得分:0)
如果你使用linux,
ulimit -a
ulimit -c ulimited // set core file size limitless
然后再次运行可执行文件。将创建一个核心文件。这是分段错误之前最后一个堆栈的快照。
gdb [executable] core
现在您可以看到分段错误引发的位置。
答案 1 :(得分:0)
我认为你的问题就在这里
<main>
<aside>Menu</aside>
<section class="flex-items">
<div class="flex-item">item1</div>
<div class="flex-item">item2</div>
<div class="flex-item">item3</div>
</section>
</main>
你应该在控制台上发送一些东西作为参数,否则这个空格(argv [1])是无效的,因此发生了分段错误。
在您的情况下,参数应该是您尝试连接的计算机的名称。例如:
hp = gethostbyname(argv[1]);
应该这样做。
答案 2 :(得分:0)
您需要检查argc[1]
是否存在。
一个简单的:
if (!argv[1])
return (-1);
可能会做到这一点。
提示:Valgrind和GDB是两个非常强大的工具,可以找到错误的来源并解决它们。
习惯从这些日志中读取日志需要花费一些时间,但我保证,一旦您习惯了它,不仅大部分超时和SegFaults都会更容易解决,但是你&# 39; ll还能够在跟踪内存泄漏,分配和释放时优化程序的内存消耗。