【发布时间】:2021-05-08 02:27:38
【问题描述】:
我正在尝试编写一个函数,该函数从指向其他类对象的两个指针创建一个类对象,但我不断收到读取访问冲突错误。 我的程序有三个类:
class A {
public:
A(const A& a2); // Special copy constructor
private:
int a = 0;
}
class B {
public:
B(const B& b2); // Special copy constructor
private:
int b = 0;
}
class C {
public:
A* aPtr;
B* bPtr;
}
我想要做的是有一个函数,它接受一个指向 A 对象和 B 对象的指针,然后将它们取消引用到 C 实例中。复制对象本身很重要,因为它是用于多线程目的。函数例如:
void foo(A* ptrA, B* ptrB){
C* ptrC = new C();
*ptrC->aPtr = *A;
*ptrC->bPtr = *B;
}
但这给了我一个读取访问冲突错误。 我究竟做错了什么?我知道对象本身被复制而没有错误,所以我认为这与我如何声明 ptrC 或取消引用 ptrC->A 和 ptrC->B 有关。我是对的吗? 什么是可能的解决方案?
提前致谢。
【问题讨论】:
-
但这给了我一个读取访问冲突错误 -- 请发minimal reproducible example。
-
*ptrC->A = *A;是三星级程序员的新转折。 -
你永远不会初始化
C::aPtr或'C::bPtr。 -
@FrançoisAndrieux 对不起,我的错。我会解决的。
-
其实它们是初始化的,但是由于使用了括号
nullptr,所以初始化为C* ptrC = new C();。否则你有一个观点——没有括号,这些成员就不会被初始化。
标签: c++ class pointers debugging memory-management