c++ - 容器在结构内部崩溃?

标签 c++ stl struct containers

在结构中访问标准容器 vector、map 和 multimap(只有我尝试过的)时,我似乎无法写入它们。这是我正在尝试做的一个例子:

struct B
{
    void* pp;
};

struct A
{
    std::vector< B* > veEvents;
};

在某处的类函数中

A* d = new A;

B* f = new B;
d->veEvnts.push_back( f );  //<< this line crashes 

尝试以这种方式访问​​容器会导致 STD 崩溃。它在引用此指针的行上的 STD 代码中崩溃。我已经尝试了几种变通方法,包括对 vector 语句进行类型定义,但没有奏效。似乎有希望作为解决方法的方法是将一个函数放入结构中并调用该函数...

struct B
{
   void* pp;
};

struct A
{
    void K( B* f )
    {
        static std::vector< B* > veEvents;

        veEvnts.push_back( f );  //<< this line crashes 
    }
};

在一些类函数中

A* a = new A;
B* b = new B;
a->K(b);   //This seems to work.

有什么方法可以解决最初的问题,即访问在结构内声明的容器会导致访问问题?

最佳答案

好的!追根究底。 Ivaylo 对堆栈损坏的看法是正确的。有问题的指针指向类成员变量区域中的一个 vector 。 vector 最初是在那里创建的,复制到堆上另一个相同结构类型的结构,但 vector 仍然指向类堆栈。我试着写一份深层拷贝,但来自不同的类(class)。那没有用。所以我从一开始就在堆上创建了一个结构,并在第一次传递时用它来保存变量。后来,在另一个类中,通过堆上的结构,可以访问 vector 。最初应该以这种方式创建原始结构。再次感谢大家。感谢您的帮助。

关于c++ - 容器在结构内部崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15518942/

相关文章:

c++ - 当 cin.get(a, size) 填充时,char 数组如何过大

c++ - 模板类中方法的完全特化

c++ - std::next with n > std::distance(it, c.end())

使用结构的 C 函数,为什么它不起作用?

c++ - 使用 vcpkg 如何使用不同的 C++ 标准构建 boost ?

c++ - 寻求为基于Java的在线游戏创建机器人

C++ STL : Passing an empty container to lower_bound

c++ vector 迭代器到函数模板

c - 使用结构将值发送到另一个函数 - 这有什么问题?

c - 使用 {0} 或 {'\0' } 初始化结构之间有什么区别吗?