【发布时间】:2020-04-07 01:09:24
【问题描述】:
我的问题的要点: 确保在构造函数中初始化动态数组,而不是在类的主体中。
当我尝试为本地 int 变量分配数组的值时,我遇到了读取访问冲突。数组实际上是一个在另一个类中动态分配和初始化的指针。我不确定我错过了什么,如果有人可以帮助我,我将不胜感激:
编辑:我已经修复了一个较早的错误,即我从索引中调用了数组,但我仍然收到读取错误。
Edit#2:我在下面不使用指针的情况下尝试了相同的 sn-p 代码,它可以工作。但是,当我动态分配指针时,我的程序崩溃了。
#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;
}
【问题讨论】:
-
Ji具有从0到1的有效索引。2不是有效索引。 -
是的,对不起。我已经解决了这个问题,但是编译后仍然出现读取访问错误
-
好吧,这不是您访问
n元素数组的索引n的唯一地方。n元素数组的有效索引是0到n - 1。 -
哪个变量有这个值?该变量应该具有什么正确值?该变量应该在什么时候具有正确的值?转到代码中应该分配正确值的位置,找出为什么没有分配正确值。
标签: c++