【发布时间】:2020-02-13 04:44:21
【问题描述】:
我正在尝试使用地址更改在堆中创建的类成员的值,并在下面显示错误。
class class2 {
private:
string String = "x";
public:
string function() {
return String;
}
};
class class1 {
public:
string String;
class2* i;
void address(class2* x) {
x = new class2();
i = x;
}
void function(string x) {
String = x;
}
};
int main() {
int len;
cin>>len;
class1 **Class1 = new class1*[len];
for(int i = 0; i < len; i++) {
Class1[i] = new class1[i];
}
Class1[0]->address(Class1[0]->i);
Class1[0]->function(Class1[0]->i->function());
cout<<Class1[0]->String;
}
在 Project70.exe 中的 0x0F4D514F (vcruntime140d.dll) 处引发异常: 0xC0000005:访问冲突写入位置0xDDDDDDDD。
【问题讨论】:
-
请显示minimal reproducible example。你可以edit你的问题。但是
class1 **Class1中的两颗星不好看,记住你用的是c++,不是C。 -
new class1[i]应该做什么? -
你的意见是什么?
-
当 i 为 0 时,
Class1[0] = new class1[0];正在分配零个 class1 对象。取消引用 0 个对象的数组Class1[0]->address正在做 UB。在那之后,所有的赌注都被取消了。 -
@Eljay UB:未定义的行为?善待新程序员。
标签: c++ class new-operator undefined-behavior memory-mapped-files