小编bba*_*zso的帖子

nm:"U"符号未定义

当我在我的一个lib上nm:

nm libmylib.so

我得到这样一条线

             U _ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4
Run Code Online (Sandbox Code Playgroud)

我查看了nm的手册页,我得到了"U"符号未定义.未定义的符号究竟意味着什么?

如果它确实是未定义的,那么为什么nm会报告它呢?

c++ linker development-environment

49
推荐指数
2
解决办法
3万
查看次数

运算符string(){some code}的作用是什么?

我在类中有以下代码:

operator string() {
        return format("CN(%d)", _fd);
}
Run Code Online (Sandbox Code Playgroud)

并想知道这个运营商做了什么.

我熟悉通常的字符串运算符:

bool operator==(const string& c1, const string& c2);
bool operator!=(const string& c1, const string& c2);
bool operator<(const string& c1, const string& c2);
bool operator>(const string& c1, const string& c2);
bool operator<=(const string& c1, const string& c2);
bool operator>=(const string& c1, const string& c2);
string operator+(const string& s1, const string& s2 );
string operator+(const Char* s, const string& s2 );
string operator+( Char c, const string& s2 );
string operator+( const string& …
Run Code Online (Sandbox Code Playgroud)

c++

13
推荐指数
2
解决办法
9249
查看次数

如果调用fclose(0),这会关闭stdin吗?

如果调用fclose(0),这会关闭stdin吗?

我问这个的原因是由于某种原因,stdin在我的应用程序中被关闭,我无法弄清楚为什么.我检查了fclose(stdin),这不在应用程序中,所以我想知道fclose(0)是否会导致未定义的行为,例如关闭stdin?

如果没有,stdin可能被错误关闭的其他方式是什么?

c c++ stdin posix

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

C++程序总是在执行std :: string赋值时崩溃

我一直在尝试调试崩溃的应用程序崩溃(即断言 *glibc检测到* free():无效指针:0x000000000070f0c0***)而我正在尝试对字符串进行简单的赋值.请注意,我正在使用gcc 4.2.4在Linux系统上进行编译,优化级别设置为-O2.使用-O0,应用程序不再崩溃.

例如

std::string abc;

abc = "testString";
Run Code Online (Sandbox Code Playgroud)

但如果我按如下方式更改了代码,它就不会再崩溃了

std::string abc("testString");
Run Code Online (Sandbox Code Playgroud)

所以我再次挠挠脑袋!但有趣的模式是,崩溃后来在应用程序中移动,AGAIN在另一个字符串.我发现应用程序在字符串赋值上不断崩溃是很奇怪的.典型的崩溃回溯看起来如下:

#0  0x00007f2c2663bfb5 in raise () from /lib64/libc.so.6
(gdb) bt
#0  0x00007f2c2663bfb5 in raise () from /lib64/libc.so.6
#1  0x00007f2c2663dbc3 in abort () from /lib64/libc.so.6
#2  0x00000000004d8cb7 in people_streamingserver_sighandler (signum=6) at src/peoplestreamingserver.cpp:487
#3  <signal handler called>
#4  0x00007f2c2663bfb5 in raise () from /lib64/libc.so.6
#5  0x00007f2c2663dbc3 in abort () from /lib64/libc.so.6
#6  0x00007f2c26680ce0 in ?? () from /lib64/libc.so.6
#7  0x00007f2c270ca7a0 in std::string::assign (this=0x7f2c21bc8d20, __str=<value optimized out>)
    at …
Run Code Online (Sandbox Code Playgroud)

c++ crash gdb valgrind stdstring

11
推荐指数
2
解决办法
1万
查看次数

如何使用操纵器使用填充左零来格式化我的十六进制输出

下面的小测试程序打印出:

并且SS编号IS = 3039

我希望用左边填充的零打印出数字,使总长度为8.所以:

并且SS编号IS = 00003039(注意留下的额外零填充)

我想知道如何使用操纵器和字符串流来完成此操作,如下所示.谢谢!

测试程序:

#include <iostream>
#include <sstream>
#include <string>
#include <vector>

int main()
{

    int i = 12345;
    std::stringstream lTransport;

    lTransport << "And SS Number IS =" << std::hex << i << '\n';

    std::cout << lTransport.str();

}
Run Code Online (Sandbox Code Playgroud)

c++ manipulators

10
推荐指数
1
解决办法
8691
查看次数

在gdb中<值优化>是一个问题吗?

我有一个只在-O2优化中崩溃的应用程序(使用gcc 4.2.4编译).当我单步执行代码并到达崩溃并尝试检查值的位置时,我在gdb中得到"值优化".

我在网上看到这意味着该值存储在寄存器中.我想知道我的崩溃是否与某些信息放在寄存器中这一事实有关?有没有办法打印寄存器中的内容以查看它是否已损坏?有没有办法保持优化但不使用寄存器?

谢谢!

c++ gcc gdb

9
推荐指数
2
解决办法
1万
查看次数

对valgrind的补充?

在过去的几周里,我一直在努力寻找一个让我的应用程序崩溃的真正困难的bug.首先,应用程序在分配std :: string时崩溃,然后在释放局部变量期间崩溃.

仔细检查代码后,没有理由在这些位置崩溃; 但是,它在尝试释放无效指针(即指向无效内存的指针)时总是崩溃.我不知道为什么这个指针没有指向正确的位置.

我怀疑这个问题与内存损坏问题或某种指针损坏问题有关.问题是我无法直观地追踪它.... 我不知道从哪里开始查看代码,并且有数千行代码要经过,所以这似乎不是解决问题的现实方法.

所以Valgrind来了......

我依赖很多时间来查找代码中可能导致此类崩溃的问题的工具.但是,这次它空手而归!当问题发生时我没有看到valgrind中的任何错误,因此我提出这个问题的原因.

是否有任何其他应用程序可以补充valgrind并帮助查找可能导致上述崩溃的代码中的问题?

谢谢!

c++ valgrind

8
推荐指数
3
解决办法
2614
查看次数

如果我知道带有gdb的类型,我怎么能看到boost :: any的值

我有一个核心转储,我正在使用gdb查看核心转储.

我想知道是否有办法能够检查gdb中boost :: any值的值?

在核心,我有地址提升任何,所以我尝试将其转换为占位符,看看我是否可以检查价值,但我做不到.我知道boost的类型是unsigned long,所以有没有办法查看知道类型的任何值?

(gdb) print ('boost::any::placeholder')(*(('boost::any'*)0x00007f263fa27730).content)
warning: can't find linker symbol for virtual table for `boost::any::placeholder' value
warning:   found `boost::any::holder<bool>::~holder()' instead
$129 = warning: can't find linker symbol for virtual table for `boost::any::placeholder' value
warning:   found `boost::any::holder<bool>::~holder()' instead
warning: can't find linker symbol for virtual table for `boost::any::placeholder' value
warning:   found `boost::any::holder<bool>::~holder()' instead
{
  _vptr.placeholder = 0x7f2a9a662560
}
Run Code Online (Sandbox Code Playgroud)

任何有关此事的帮助将不胜感激.谢谢!

c++ boost gdb backtrace boost-any

7
推荐指数
1
解决办法
738
查看次数

可以用同一个库连接两次是g ++的问题吗?

我注意到当我使用gcc创建应用程序并在链接阶段查看输出时,我看到以下lib包含两次:

/home/rb01/opt/trx-HEAD/gcc/4.2.4/lib/../lib64/libstdc++.so

所以我只是想知道这是g ++(gcc)的问题,还是第二个被忽略了?

谢谢!

c++ gcc g++

4
推荐指数
1
解决办法
1869
查看次数

可以在构造函数中分配std :: string吗?

我有以下构造函数:

 TCPConnector(int32_t fd, string ip, uint16_t port,
            vector<uint32_t>& protocolChain, const Variant& customParameters)
    : IOHandler(fd, IOHT_TCP_CONNECTOR) {
        _ip = ip;
        _port = port;
        _protocolChain = protocolChain;
        _closeSocket = true;
        _customParameters = customParameters;
    }
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以在构造函数中安全地分配字符串(即_ip)而不显式初始化它?

c++

4
推荐指数
1
解决办法
156
查看次数

gdb错误:无法执行epoll_wait:(4)系统调用中断

由于以下错误,我无法使用gdb在调试中运行我的代码:

无法执行epoll_wait:(4)系统调用中断

关于如何解决这个问题的任何想法?

谢谢

c++ gdb

3
推荐指数
1
解决办法
3666
查看次数

如何在linux中找到堆栈溢出问题?

我正在使用第三方库编译我的应用程序,似乎有一些奇怪的行为表明堆栈溢出问题(这只是猜测).

但是,当我崩溃应用程序的行运行正常后,我添加一个print语句.如果我删除了print语句(一个简单的cout <<"print something"<< endl;语句),应用程序崩溃了

0x00007f48f2027276 in free () from /lib64/libc.so.6
Run Code Online (Sandbox Code Playgroud)

我尝试添加以下char数组来代替print语句,这也停止了崩溃,然后我尝试打印char数组的内容:

char ben[8000] = {0};
memset(&ben, 0, sizeof (ben));

for (int y = 0; y < 8000; ++y)
{
if (ben[y] != 0)
  PRINT ("CHAR[%d]=%d", y, ben[y]);
}
Run Code Online (Sandbox Code Playgroud)

看看数组中的任何内容是否被破坏,但这种方法不起作用.所以我想知道是否有更好的方法来检测这是否是堆栈溢出问题?

我用-fstack-protector-all(lib和我的代码)重新编译了应用程序,这并没有发现任何东西.我也试过valgrind而且它没有给我任何看起来可疑的东西.

它似乎崩溃,因为我试图释放一个无效的指针,但我不知道为什么指针是无效的,因为它释放了一个局部变量(即当它超出范围时).指针因某种原因而被破坏,但这有点像在大海捞针.有没有什么好的技术可以尝试和融合这类问题?非常感谢!

c++ debugging overflow

2
推荐指数
1
解决办法
2528
查看次数