【发布时间】:2020-03-22 00:23:05
【问题描述】:
我正在做一个编程项目的列表,而这个项目是做一个 15 拼图(幻灯片拼图)。当我遇到一个小障碍时,我正在做这个项目。
我的代码编译得很好,但是当我运行它时,我在第 12 行遇到了分段错误:pos[0] = x;
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <time.h>
using namespace std;
class Tile{
private:
vector<int> pos;
int value;
public:
Tile(int x, int y, int value_){
pos[0] = x;
pos[1] = y;
value = value_;
}
~Tile(){}
int getPos(int a){return pos[a];}
void setPos(int a, int b){pos[a] = b;}
};
int main(){
Tile tile1(1, 2, 10);
Tile* t1;
t1 = &tile1;
// returns position "x"
cout << t1->getPos(0);
return 0;
}
我的意思是,我可以直接完成整个项目,而不必使用向量/数组来处理位置,但我仍然想知道,为了我自己将来的理解,为什么这不起作用。
根据我运行的调试,程序在初始化 pos[] 向量的值时遇到问题。
另一个问题:可能相关,我尝试在实例化向量时设置它的大小。
vector<int> pos(2);
然后我得到调试错误:
error: expected identifier before numeric constant
不确定这里发生了什么。我尝试了很多不同的方法,但我似乎无法弄清楚为什么我的向量在类中不起作用。
我确信有一百种方法可以让我把这件小事做得更好,我很想知道你会如何解决它,但我也需要知道哪里出了问题,特别是在我写过也试过了。
谢谢。
【问题讨论】:
-
pos[0] = x;是未定义的行为。 -
为什么要使用向量,它总是2个坐标,使用数组。
标签: c++ pointers vector segmentation-fault