gpt4 book ai didi

c++ - Valgrind 赋值错误

转载 作者:行者123 更新时间:2023-11-28 06:54:13 25 4
gpt4 key购买 nike

我被难住了。我正在为一项学校作业开发一个小型数据服务器,在这次迭代中,它应该通过套接字进行通信。它的大部分都在工作,但我不太明白 valgrind 在提示什么,但这就是它的全部内容。

valgrind 说;

 Conditional jump or move depends on uninitialised value(s)
at 0x4C2ABD9: strlen (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
by 0x510F0EF: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (in /usr/lib64/libstdc++.so.6.0.17)
by 0x4078C9: netreq::cread() (netreq.c:120)
by 0x402585: event(void*) (simpleclient.C:166)

gdb 似乎在进程的同一点接收到 SIGPIPE。

这是它提示的功能;

string netreq::cread()
{
char buf[255];

if(read(fd,buf, 255) < 0)
cout << "I cants read dat right, sorry"<<endl;

return (string)buf; //this is line 120 in netreq.c
}

想法?有人修过类似的东西吗?我已经尝试了很多东西,但还没有运气。

最佳答案

read() 不会以\0 结束数组来表示结束。你应该自己做。

int len;
if ((len = read(fd, buf, 255)) < 0) {
/* ... */
} else {
buf[len] = '\0';
}

return string(buf);

关于c++ - Valgrind 赋值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23377356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com