小编fly*_*hny的帖子

为什么new [-1]会生成segfault,而new [-2]会抛出bad_alloc?

我尝试bad_alloc通过传递一些否定参数来测试异常new[].当传递小的负数时,我得到了我所希望的 - a bad_alloc.但是,在传递时-1,我可以看到我的对象构造了数千次(我在构造函数中打印静态计数器),应用程序终止于segfault.

new[]转换有符号整数size_t,所以-1是最大size_t-2maximum - 1等.

那么为什么new[]在接收一些巨大的数字时抛出异常,但是在接收到最大值时会尝试分配size_t?是什么区别1111...1,并1111...0new[]?:)

提前致谢!

c++ new-operator bad-alloc negative-number

12
推荐指数
1
解决办法
563
查看次数

connect()使用ipv6地址返回"invalid argument"

我有这个简单的客户端 - 服务器应用程序对.代码很简单,我只使用新的,建议的方法,如getaddinfo等,一切都适用于ipv4.即使对于ipv6 loopback(:: 1)也适用.当涉及到其他一些ipv6地址时出现问题...我在网络中有两台机器,当我传递他们的ipv4地址时一切正常,但是当我给我的客户端ipv6地址时,我在连接函数上出错:无效的参数.嘿,我不知道这个吗?我做!当我尝试ping这个ipv6地址时,我得到同样的错误:

connect:参数无效

但是有一种方法可以克服这个障碍 - 应该选择一个带-I开关的接口,从那时起它就会顺利运行.但是如何在我的客户端应用程序中实现相同的目标?我该怎么办?我的客户端代码如下所示:

struct addrinfo hints;
struct addrinfo *server;

memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;

int status;
if((status = getaddrinfo(argv[1], argv[2], &hints, &server) != 0))
{
    perror("getaddrinfo error");
    return 1;
}

int sock_fd;
struct addrinfo *ptr;
for(ptr=server;ptr!=NULL;ptr=ptr->ai_next)
{
    if( (sock_fd = socket(ptr->ai_family,ptr->ai_socktype,ptr->ai_protocol)) == -1)
    {
        perror("socket error");
        continue;
    }
    if( connect(sock_fd, ptr->ai_addr,ptr->ai_addrlen) == -1 )
    {
        perror("connect error");
        continue;       
    }
    break;
}
Run Code Online (Sandbox Code Playgroud)

c c++ arguments connect

8
推荐指数
2
解决办法
8157
查看次数

标签 统计

c++ ×2

arguments ×1

bad-alloc ×1

c ×1

connect ×1

negative-number ×1

new-operator ×1