草庐IT

virtual-address-space

全部标签

c++ - "Function has no address"尽管禁用了优化 (/Od)

在MSVC2012的调试过程中,我尝试从Watch窗口调用一些函数,以便将数据转储到文件中。但是,我不断收到此错误:FunctionMatrix::Savehasnoaddress,possiblyduetocompileroptimizations.Matrix类位于我自己的外部库中。快速检查表明,外部库中的所有方法都没有地址,并且所有从Watch调用它们的尝试都会返回此错误,但在头文件中定义的方法除外。主项目中的方法无论在哪里定义都有地址。当然,整个解决方案都禁用了优化。符号正常加载。我该如何解决? 最佳答案 到目前为止,我找到

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

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

c++ - 为什么 `explicit` 与 `virtual` 不兼容?

structA{//errorC2216:'explicit'cannotbeusedwith'virtual'virtualexplicitoperatorbool()const{returntrue;}};structB:A{//errorC2216:'explicit'cannotbeusedwith'override'explicitoperatorbool()constoverride{returnfalse;}};intmain(){if(A()){}if(B()){}}我的编译器是VC++2013RC。为什么explicit与virtual不兼容?原因是什么?

C++ 构造函数 : why is this virtual function call not safe?

这是来自C++11标准sec12.7.4。这比较困惑。文中最后一句话到底是什么意思?为什么最后一个方法调用在B::B不明确的?不应该只是打电话a.A::f?4Memberfunctions,includingvirtualfunctions(10.3),canbecalledduringconstructionordestruction(12.6.2).Whenavirtualfunctioniscalleddirectlyorindirectlyfromaconstructororfromadestructor,includingduringtheconstructionordest

C++专访: vtable for a class with a pure virtual function

我今天被问到这个面试问题!!(这是一个非常尴尬的电话采访..):Whatisthedifferencebetweenthevtableforaclasswithvirtualfunctionsandaclasswithpurevirtualfunctions?现在,我知道C++标准没有指定任何关于vtables的内容,甚至没有指定v-table的存在......但是从理论上讲,答案是什么?我脱口而出,具有纯虚函数的类可以有一个vtable,其纯虚函数的vtable条目将指向派生类的实现。这个假设正确吗?我没有得到面试官的肯定回答。假设的编译器会为只有纯虚函数的类创建一个vtable吗?

c++ - 这个头文件是什么意思(virtual const char* what() const throw())?

classmyexception:publicexception{virtualconstchar*what()constthrow(){return"Myexceptionhappened";}};抱歉,这个问题可能听起来很愚蠢,但我无法解析标题。有人可以用英语描述标题的实际含义吗?首先让我觉得奇怪的是关键字virtual。myexception类不是基类,它继承自已经实现的exception类,那么为什么在这里使用virtual呢?我猜const是用于返回类型,它是一个c风格的字符串,它是const,而另一个const是为了确保这个对象不能被修改(有人能告诉我那个物体可能是什么吗?

C++ 指针 : changing the contents without changing the address?

MyCustomObject*object=newMyCustomObject();假设我的许多类都使用了对象指针,但突然间我想在不更改地址的情况下更改指针的内容。我认为object=newMyCustomObject()会给对象一个新的指针地址是不是错了?我想要新对象而不更改指针地址(是的,我会确保清理旧对象)。 最佳答案 通常最好更改对象的属性(通过调用其方法)而不是删除它并创建一个新对象。特别是可以完全通过赋值来替换对象,如:*object=MyCustomObject();//Replaceobjectwiththeresu

c++ - 为什么 'virtual' 对于派生类中的重写方法是可选的?

当一个方法在类中声明为virtual时,它在派生类中的覆盖也自动被视为virtual,C++语言将这个关键字设为虚拟在这种情况下是可选的:classBase{virtualvoidf();};classDerived:publicBase{voidf();//'virtual'isoptionalbutimplied.};我的问题是:将virtual设为可选的理由是什么?我知道编译器并非绝对有必要被告知,但我认为如果编译器强制执行这样的约束,开发人员将会受益。例如,有时当我阅读其他人的代码时,我想知道一个方法是否是虚拟的,我必须追踪它的父类(superclass)来确定这一点。并且一些

c++ - C++ 中的 "As a rule of thumb, make all your methods virtual"- 合理的建议?

我只是偶然看到了标题中的陈述。完整的报价是:Asaruleofthumb,makeallyourmethodsvirtual(includingthedestructor,butnotconstructors)toavoidproblemsassociatedwithomissionofthevirtualkeyword.我在Wrox的书ProfessionalC++中找到了这个。Youcangoogleittocheck.这有什么关系吗?我原以为您只会提供选择的扩展点,而不是默认的可扩展性。例如,a2001articlebyHerbSuttersaysso.从那以后,有什么发生了巨大

c++ - Arduino C++ 代码 : can you use virtual functions and exceptions?

跟进thiscomment来自问题Writingfirmware:assemblyorhighlevel?:为Arduino编译C++代码时平台,可以使用虚函数、异常等吗?或者您想(必须)使用C++的一个子集(如thecomment中所述)?为Arduino平台编程时还有其他注意事项吗? 最佳答案 Arduino环境使用GCC工具链的AVR版本。代码编译为C++,因此您可以使用类。虚拟功能是可能的;vtables将存储在.data部分并具有正确的地址。事实上,Print基类使用虚函数来使各种“打印”方法适应不同的输出类型。由于代码空