Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 跨单行函数调用的内存损坏?_C++_Arrays_Pointers_Gdb - Fatal编程技术网

C++ 跨单行函数调用的内存损坏?

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::

我从一些访问由字符串组成的数组的代码中得到一个seg错误。奇怪的是,我在一个单行函数调用中丢失了内存

这是我的代码:

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);