C++ 跨单行函数调用的内存损坏?
我从一些访问由字符串组成的数组的代码中得到一个seg错误。奇怪的是,我在一个单行函数调用中丢失了内存 这是我的代码:C++ 跨单行函数调用的内存损坏?,c++,arrays,pointers,gdb,C++,Arrays,Pointers,Gdb,我从一些访问由字符串组成的数组的代码中得到一个seg错误。奇怪的是,我在一个单行函数调用中丢失了内存 这是我的代码: class A { void method1(){ std::cout << _myArray[ID] << std::endl; //This outputs fine _pointerToObjectB->method2(ID, side); } std::
class A {
void method1(){
std::cout << _myArray[ID] << std::endl; //This outputs fine
_pointerToObjectB->method2(ID, side);
}
std::array<std::string, 30000> _myArray;
B* _pointerToObjectB;
};
A类{
void method1(){
std::cout\u pointer对象b
未初始化。调试器输出中的this=0x0
是一个死赠品。–Igor Tandetnik
对Igor回答的一个小更正:\u指针tobjectb
没有指向B
的实例。它是NULL
。它可能是偶然的NULL
(它实际上没有初始化),或者它可能已经初始化为NULL
——我们不知道,因为您没有显示初始化代码
如果指针为null,我不希望发生方法调用
这似乎是你误解的根源
非虚拟方法调用与常规函数调用完全不同。编译器将其转换为:
Foo *foo = ...;
foo->Bar();
为此:
_ZN3Foo3Barv(foo);
其中\u ZN3Foo3Barv
只是编译器附加到Foo::Bar(void)
方法定义上的一个标签。事实上,您可以用普通的C
编写上面的调用,它会起作用
虚拟方法的工作方式不同,通过NULL
指针调用虚拟方法的行为可能与您预期的一样--在登录到被调用的方法之前会崩溃。\u指针对象b
未初始化。调试器输出中的this=0x0
是一个致命的漏洞。@samgak调试器说ID=362
您应该提供一个小型的自包含可编译示例。您提供的代码显然不是全部。您似乎没有完全初始化的成员。这很明显,因为当您点击method2()时,gdb报告此指针为空.成员的初始化在哪里?为什么您不期望方法调用发生?哪篇文档误导了您?
Foo *foo = ...;
foo->Bar();
_ZN3Foo3Barv(foo);