注意我的问题:确保在构造函数中而不是在类的主体中初始化动态数组。
当我试图为一个局部变量分配数组的值时,我遇到了读取访问冲突。数组实际上是在另一个类中动态分配和初始化的指针。我不知道我错过了什么,如果有人能帮我,我会非常感激的:
编辑:我修正了之前的一个错误,我把数组从索引中调用出来,但是我仍然得到一个读取错误。
Edit#2:我在没有使用指针的情况下尝试了下面相同的代码片段,而且它可以工作。但是,当我动态分配指针时,我的程序就会崩溃。
#include <iostream>
using namespace std;
class Discretization {
public:
int Number_Elements, Number_Nodes;
int *Ji = new int [Number_Elements];
int* Jj = new int[Number_Elements];
double* x = new double[Number_Nodes], * y = new double[Number_Nodes];
Discretization() {
Number_Elements = 8;
Number_Nodes = 9;
Ji[0] = 1; Jj[0] = 2;
Ji[1] = 2; Jj[1] = 3;
Ji[2] = 3; Jj[2] = 4;
Ji[3] = 2; Jj[3] = 5;
Ji[4] = 3; Jj[4] = 6;
Ji[5] = 6; Jj[5] = 7;
Ji[6] = 7; Jj[6] = 8;
Ji[7] = 7; Jj[7] = 9;
x[0] = -8.327; y[0] = -35.040;
x[1] = 0; y[1] = -35.040;
x[2] = 0; y[2] = 0;
x[3] = -8.327; y[3] = 0;
x[4] = 8.327; y[4] = -35.040;
x[5] = 8.327; y[5] = 0;
x[6] = 25.778; y[6] = 0;
x[7] = 25.778; y[7] = 5.986;
x[8] = 25.778; y[8] = -5.986;
}
};
class GeometricProperties : public Discretization {
public:
void AddVar(int Current_Element) {
int Node_m = Ji[Current_Element] - 1; //Returns the first node of the element
int Node_n = Jj[Current_Element] - 1; //Returns the second node of the element
//Retruns local x coordinate of node m and n
double Node_m_x = x[Node_m];
double Node_n_x = x[Node_n];
}
GeometricProperties() {
AddVar(1);
}
};
int main() {
GeometricProperties myobj;
return 0;
}发布于 2020-04-07 01:16:24
GeometricProperties的构造函数调用AddVar(2),这意味着CurrentElement为2,但是Ji的大小为2,所以只能索引0和1。
这意味着您正在对Ji进行超出界限的索引。我是UB,你的程序可能会崩溃。
您需要修复所有这样的UB示例。即使你的程序有UB在代码中永远不会运行,这个程序也是错误的。
https://stackoverflow.com/questions/61071287
复制相似问题