gpt4 book ai didi

c++ - 段错误(核心已转储)- 访问冲突读取位置 x

转载 作者:行者123 更新时间:2023-11-28 05:51:59 27 4
gpt4 key购买 nike

我正在编写一个有点像玩具的程序来进入 C++。但是,我在代码中非常特定的一行遇到段错误时遇到了很多麻烦。我知道段错误意味着我试图访问未提供给我程序的内存。代码(有点)如下(实际上只是复制粘贴太大了):

class car {
protected:
int speed;
std::string brand;
public:
car (int s, std::string b):speed(s),brand(b) {
std::cout << "New car has been created" << endl;
}
virtual int is_stopped () {
if (speed==0) return 1;
else return 0;
}
virtual void speed_up () {
speed++;
}
car* clone () {
car* tmp(this);
return tmp;
}
};
class fast_car : public car {
public:
fast_car (int s, std::string b):car(s,b) { }
};
class slow_car : public car {
public:
slow_car (int s, std::string b):car(s,b) { }
};
class highway {
int number_of_cars;
car **first; //There are derived classes from car hence the double pointer
public:
highway (int c, int s, std::string b):number_of_cars(c) {
first = new car*[c];
for (int i=0;i<c/2;i++)
first[i] = new fast_car (s,b);
for (int i=c/2;i<c;i++)
first[i] = new slow_car (s,b);
}
void speed_up () {
int pos;
pos = rand()%number_of_cars; //give me a random number between 0 and number_of_cars;
if (pos!=0) pos--; //We don't want position -1
first[pos]->speed_up ();
clone_fast (first[pos], (number_of_cars - pos - 1)); //the second argument is the remaining array "spots" until the end of the array
}



void clone_fast (car* cur, int rem) {
car* tmp;
for (int i=-;i<=rem;i++)
if ((cur+1)->is_stopped ()) { //Exact line where I get the segmentation fault
tmp = cur->clone ();
cur++;
}
}
};

原来如此。我试图为您提供一切可能来重现该问题。我会尝试解决任何进一步的问题。任何帮助将不胜感激。

最佳答案

car*new 创建,不一定连续;它们当然不是您可以使用指针算术的数组。 (car*) + 1(car**)[i + 1] 不同(后者更像是 (car**) + 1 )。您可能想要更像 (*(first + 1))->doThing() 的东西,而不是 (first[X] + 1)->doThing() .

编辑:更清楚一点,如果你不能做 car[X + 1],那么你就不能做 *(car + 1)。由于 clone_fast() 中的 car 是对象指针而不是数组,您不能执行 car[X + 1],因此 (cur + 1)->is_stopped() 是错误的。

关于c++ - 段错误(核心已转储)- 访问冲突读取位置 x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35047710/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com