我遇到了一个非常奇怪的错误。我有一个struct sender
,它封装了UDP sendto()所需的资源。发件人使用send()
方法封装了BSD套接字sendto()
。
以下代码有效。
alice = sender(bob_ip, bob_port);
alice.send();
BUG 以下代码失败
alice = sender(bob_ip, bob_port);
puts("====");
alice.send();
如此奇怪,如果我在{{1}内放置I / O或睡眠操作(例如,put(" ====")) }} 方法。它仍然有效。
有人可以解释为什么会这样吗? 完整源代码:
alice.send()
答案 0 :(得分:0)
您正在初始化结构以指向仅在init()
函数中作为本地存在的变量。
只要该函数退出,这些指针就会无效并解除引用它们(因为sendto()
会将指针传递给它)。会给你不确定的行为。
您应该将实际地址数据添加到结构本身,因此它会保持不变。