0

当我开始运行我的项目时,我遇到了分段错误。

我已经宣布了 2 个不同的课程

Class myfirstclass {
int x[4];
};

在二等

我使用以下命令访问数组“x[4]”

myfirstclass  * firstptr;
firstptr -> x[4];

现在,当我分配“firstptr -> x[4];”时 到一个数组做一些计算我得到一个分段错误?

int y[4];
for (int i=0; i<4;i++){
  y[i]= firstptr -> x[i]; -> "This statement what caused the segmentation fault."
}

你能帮我解决这个错误吗?

4

3 回答 3

1

如果你这样做

myfirstclass  * firstptr;
firstptr -> x[4];

你还没有初始化firstptr。你需要做类似的事情

myfirstclass  * firstptr = new myfirstclass();

别忘了去delete firstptr某个地方。
或者只是使用堆栈

myfirstclass  first;

接下来,您正在使用

firstptr -> x[4];

由于您有 4 个项目,int x[4];因此可以访问x[0]x[1]和。没有x[2]x[3]x[4]

注意 - 如果您使用堆栈而不是使用.而不是->

first.x[i];
于 2013-08-20T08:26:32.723 回答
1

您必须在使用前创建对象。像这样的东西:

myfirstclass  * firstptr = new myfirstclass();

或者您应该使用动态分配的对象丢弃

myfirstclass  firstptr;
int y[4];
for (int i=0; i<4;i++){
  y[i]= firstptr.x[i]; -> "This statement what caused the segmentation fault."
}

为了访问 x 您应该将其公开:

class myfirstclass {
public:
int x[4];
};

实际上,不建议将数据字段设为 bublic。

于 2013-08-20T08:26:35.503 回答
0

你需要分配你的班级。

for循环之前执行:

firstptr = new myfirstclass;
于 2013-08-20T08:24:38.883 回答