草庐IT

0x0000007c

全部标签

c++ - 为什么我在检查核心转储时进入 gdb "Cannot access memory at address 0x..."?

我在分析核心转储时尝试打印以下行时收到此消息。(gdb)p/x*($esi)Cannotaccessmemoryataddress0xe6d3a030我提到%esi(0xe6d3a030)指向的地址应该指向一些有效的分配数据。(当我自己运行这个程序并按照相同的指令中断时,这个打印有一些有意义的信息)造成这种情况的可能原因是什么?我是否遗漏了核心转储中的一些信息?如果是,我缺少什么信息?核心转储不应该包含所有已分配内存的快照吗?编辑:当我在加载核心转储时在gdb“维护信息部分”命令中使用时,我得到下面显示的信息。我可以看到地址0xe6d3a030在0xe6d00000->0xe6dfb0

c++ - -std=c++0x 和 -std=c++11 有什么区别

我知道这些标志适用于Eclipse中的C++11。但我不知道有什么区别,哪个更受欢迎。似乎他们都在正常使用C++11。 最佳答案 你应该更喜欢-std=c++11。(注意:我假设-std=c++11x是您问题中的错字)旧的-std=c++0x仅适用于不支持-std=c++11的旧编译器版本,他们选择该名称来表达当时即将推出的C++11的特性(和ABI)的初步和不稳定的性质(当时还不清楚它是否最终会成为C++10或C++12)。他们更改了一些细节以适应C++11标准正式发布之前不断变化的标准工作草案。如果您的编译器支持-std=c++

c++ - GDB 回溯消息 "0x0000000000000000 in ?? ()"是什么意思?

当它给出带有以下输出的回溯时是什么意思?#00x00000008009c991cinpthread_testcancel()from/lib/libpthread.so.2#10x00000008009b8120insigaction()from/lib/libpthread.so.2#20x00000008009c211ainpthread_mutexattr_init()from/lib/libpthread.so.2#30x0000000000000000in??()程序因标准信号11、段错误而崩溃。我的应用程序是一个在FreeBSD6.3上运行的多线程FastCGIC++程序,

c++ - 在 C++ 0x 中打开枚举类

C++0x中的新“枚举类”声明是否允许开启新奇的枚举?我问的是标准怎么说,而不是编译器支持。 最佳答案 来自n3242草案:6.4.2Theswitchstatement[stmt.switch][...]2Theconditionshallbeofintegraltype,enumerationtype,orofaclasstypeforwhichasinglenon-explicitconversionfunctiontointegralorenumerationtypeexists(12.3).7.2Enumerationde

c++ - 我应该写 `0x0` 还是 `0` 而不是 NULL?

我知道您应该在c++中使用0而不是NULL(即使NULL在C++中被定义为0大多数时间)。不过,最近我遇到了一些使用0x0代替的代码。有什么区别? 最佳答案 0x0只是0用十六进制表示。两者没有区别:016=010:)NULL通常是#defined到0某处并且做同样的事情。 关于c++-我应该写`0x0`还是`0`而不是NULL?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1

c++ - 在 C++0x 中,非静态数据成员初始化器会覆盖隐式复制构造函数吗?

根据N2628与c++0x相关,非静态数据成员初始化器可以被显式定义的构造函数覆盖,但是对于隐式定义的复制构造函数似乎有点模糊。特别是,我注意到在Appleclang3.0版中,行为会根据结构(或类)是否为POD而有所不同。以下程序返回输出“1”,这表明复制构造函数忽略右侧,而是替换新的非静态数据成员初始值设定项(在本例中,X的bool真值::一个)。#include#includestructX{std::stringstring1;boola=true;};intmain(intargc,char*argv[]){Xx;x.a=false;Xy(x);std::cout但是,令人困

c++ - CMake clang 和 c++0x

使用clang++时,如何让CMake在编译时使用-std=c++0x标志,但在链接时不使用?还有其他几篇关于使用clang作为编译器的帖子,但我没有找到任何关于设置c++标准的提示。这是我尝试过的:CMakeLists.txt:project(test)add_executable(mainmain.cxx)ClangOverride.txt:SET(CMAKE_C_FLAGS_INIT"-Wall-std=c99")SET(CMAKE_C_FLAGS_DEBUG_INIT"-g")SET(CMAKE_C_FLAGS_MINSIZEREL_INIT"-Os-DNDEBUG")SET(

C++0x : Capture By Value for Lambda, 总是一个拷贝?

是否允许编译器消除按值捕获所需的拷贝?vectormovie1;apply([=movie1](){returnmovie1.size();});有没有编译器不需要复制的情况movie1?如果编译器可以知道,也许apply实际上没有改变movie1?或者默认情况下Lambda是否有帮助const仿函数在任何情况下?是否有帮助vector有move构造函数和moveassign?如果是,是否需要将这些添加到Image还有,为了防止在这里复制昂贵的拷贝?与按值参数相比,按值捕获在何时以及如何需要拷贝的机制是否存在差异?例如。voidoperate(vectormovie)?

C++0x decltype 和范围解析运算符

使用诸如Foo之类的类:structFoo{staticconstinti=9;};我发现GCC4.5会拒绝以下内容Foof;intx=decltype(f)::i;如果我使用中间类型定义,它将起作用,例如:typedefdecltype(f)ftype;intx=ftype::i;但我更喜欢保持命名空间干净。我认为优先级可能是一个问题,所以我也尝试了括号,但没有运气。是不可能的,还是有什么语法可以帮助我? 最佳答案 说decltype(f)::i是有效的C++0x。GCC只是还不支持它。您可以使用身份模板解决它templatest

C++0x 右值引用和临时对象

(我在comp.std.c++上问了这个问题的一个变体,但没有得到答案。)为什么这段代码中对f(arg)的调用会调用f的constref重载?voidf(conststd::string&);//lessefficientvoidf(std::string&&);//moreefficientvoidg(constchar*arg){f(arg);}我的直觉说应该选择f(string&&)重载,因为arg无论如何都需要转换为临时的,而临时匹配右值引用比左值引用更好。这不是在GCC和MSVC中发生的(编辑:感谢Sumant:它不会在GCC4.3-4.5中发生)。至少在G++和MSVC中,