thread thread 1 exc_bad_access (code=exc_i386_gpflt) 是什么,如何解决?C++
Whats the thread thread 1 exc_bad_access (code=exc_i386_gpflt) and how to solve it?C++
我正在使用 C++ 编写旅游指南,当我 运行 代码、Attraction class、setName 函数和 main 函数时,我不断收到此线程,我不明白这是什么问题。这是 .cpp 和主要文件。
//.cpp file
#include <string>
#include "Attraction.h"
string Attraction::getName(){
return name;
}
int Attraction::getIDType(){
return id;
}
void Attraction::setName(string name){
this -> name = name;//In this line I receive the thread
}
void Attraction::setIDType(int typeID){
this -> typeID = typeID;
}
//main.cpp
int main() {
int x;
City Rome(111,"Rome");
City Dubai(222,"Dubai");
City Paris(333, "Paris");
menu(Rome,Dubai,Paris);
Sport* Ds = new Sport[x];
Culture* Dc = new Culture[x];
Shopping* Dh = new Shopping[x];
//{new Sport,new Sport,new Sport,new Culture,new Culture,new Culture,new Shopping,new Shopping,new Shopping};
Ds[0].setName("Camel and Horse Racing");
Ds[1].setName("Marine Sports");
Ds[2].setName("Football");
Dc[0].setName("Dubai Museum");
Dc[1].setName("Falconry");
Dc[2].setName("Sheikh Saeed Al-Maktoum's House");
Dh[0].setName("Dubai Mall");//And here
Dh[1].setName("Mall of Emirates");
Dh[2].setName("Deira City Centre");
Ds[0].setIDType(1);
Ds[1].setIDType(1);
Ds[2].setIDType(1);
Ds[3].setIDType(2);
Ds[4].setIDType(2);
Ds[5].setIDType(2);
Ds[6].setIDType(3);
Ds[7].setIDType(3);
Ds[8].setIDType(3);
Dubai.setAttraction(Ds, x);
return 0;
}
在您的 C++ 代码中,您正在创建一个大小为 x
的动态数组,但您从未为 x 赋值,这意味着它的默认值为 0。
这意味着以下行创建空数组:
Sport* Ds = new Sport[x];
Culture* Dc = new Culture[x];
Shopping* Dh = new Shopping[x];
因此,当您调用 Ds[0].setName()
时,您会遇到分段错误,因为您在错误的地址上调用方法。
为了解决这个问题,请确保为每个数组提供有效的大小。这是一个例子:
int main()
{
Sport* Ds = new Sport[9];
Ds[0].setIDType(1);
Ds[0].setName("Camel and Horse Racing");
Ds[1].setName("Marine Sports");
Ds[2].setIDType(1);
Ds[2].setName("Football");
Ds[3].setIDType(2);
Ds[4].setIDType(2);
Ds[5].setIDType(2);
Ds[6].setIDType(3);
Ds[7].setIDType(3);
Ds[8].setIDType(3);
Culture* Dc = new Culture[3];
Dc[0].setName("Dubai Museum");
Dc[1].setName("Falconry");
Dc[2].setName("Sheikh Saeed Al-Maktoum's House");
Shopping* Dh = new Shopping[3];
Dh[0].setName("Dubai Mall");//And here
Dh[1].setName("Mall of Emirates");
Dh[2].setName("Deira City Centre");
delete[] Ds;
delete[] Dc
delete[] Dh;
return 0;
}
我正在使用 C++ 编写旅游指南,当我 运行 代码、Attraction class、setName 函数和 main 函数时,我不断收到此线程,我不明白这是什么问题。这是 .cpp 和主要文件。
//.cpp file
#include <string>
#include "Attraction.h"
string Attraction::getName(){
return name;
}
int Attraction::getIDType(){
return id;
}
void Attraction::setName(string name){
this -> name = name;//In this line I receive the thread
}
void Attraction::setIDType(int typeID){
this -> typeID = typeID;
}
//main.cpp
int main() {
int x;
City Rome(111,"Rome");
City Dubai(222,"Dubai");
City Paris(333, "Paris");
menu(Rome,Dubai,Paris);
Sport* Ds = new Sport[x];
Culture* Dc = new Culture[x];
Shopping* Dh = new Shopping[x];
//{new Sport,new Sport,new Sport,new Culture,new Culture,new Culture,new Shopping,new Shopping,new Shopping};
Ds[0].setName("Camel and Horse Racing");
Ds[1].setName("Marine Sports");
Ds[2].setName("Football");
Dc[0].setName("Dubai Museum");
Dc[1].setName("Falconry");
Dc[2].setName("Sheikh Saeed Al-Maktoum's House");
Dh[0].setName("Dubai Mall");//And here
Dh[1].setName("Mall of Emirates");
Dh[2].setName("Deira City Centre");
Ds[0].setIDType(1);
Ds[1].setIDType(1);
Ds[2].setIDType(1);
Ds[3].setIDType(2);
Ds[4].setIDType(2);
Ds[5].setIDType(2);
Ds[6].setIDType(3);
Ds[7].setIDType(3);
Ds[8].setIDType(3);
Dubai.setAttraction(Ds, x);
return 0;
}
在您的 C++ 代码中,您正在创建一个大小为 x
的动态数组,但您从未为 x 赋值,这意味着它的默认值为 0。
这意味着以下行创建空数组:
Sport* Ds = new Sport[x];
Culture* Dc = new Culture[x];
Shopping* Dh = new Shopping[x];
因此,当您调用 Ds[0].setName()
时,您会遇到分段错误,因为您在错误的地址上调用方法。
为了解决这个问题,请确保为每个数组提供有效的大小。这是一个例子:
int main()
{
Sport* Ds = new Sport[9];
Ds[0].setIDType(1);
Ds[0].setName("Camel and Horse Racing");
Ds[1].setName("Marine Sports");
Ds[2].setIDType(1);
Ds[2].setName("Football");
Ds[3].setIDType(2);
Ds[4].setIDType(2);
Ds[5].setIDType(2);
Ds[6].setIDType(3);
Ds[7].setIDType(3);
Ds[8].setIDType(3);
Culture* Dc = new Culture[3];
Dc[0].setName("Dubai Museum");
Dc[1].setName("Falconry");
Dc[2].setName("Sheikh Saeed Al-Maktoum's House");
Shopping* Dh = new Shopping[3];
Dh[0].setName("Dubai Mall");//And here
Dh[1].setName("Mall of Emirates");
Dh[2].setName("Deira City Centre");
delete[] Ds;
delete[] Dc
delete[] Dh;
return 0;
}