【发布时间】:2016-11-04 08:53:24
【问题描述】:
我正在使用一个动态的指针数组。该项目需要此设置。当我执行时,我收到一个错误,即未分配被释放的指针。
更新为添加动态代码。当我尝试访问数组时,函数会抛出错误的访问错误,并在删除动态数组时出现段错误。
class Person
{
private:
string firstName;
string lastName;
int age;
int telNum;
int numAddrs;
//Address* addrs[10];
Address* addrs;
public:
Person(string, string, int, int);
Person();
Person(const Person &p);
~Person();
void setFirstName(string);
void setLastName(string);
void setAge(int);
void setTelNum(int);
void setAddress(Address*);
void setNumAddrs(int);
string getFirstName();
string getLastName();
int getAge();
int getTelNum();
Address* getAddress();
int getNumAddrs();
void displayPerson();
void addAddress(Address &newAddr);
Person& operator =(const Person &RHS);
};
Person::Person() //default
{
firstName = "John";
lastName = "Doe";
age = -1;
telNum = -1;
numAddrs = 0; //current number of addresses for this person
addrs = new Address*[10](); //throws error, won't compile
//new dynamic array of pointers, initialize to NULL
}
Person::Person(string first, string last, int y, int t)
{ //constructor to initialize Person
firstName = first;
lastName = last;
age = y;
telNum = t;
numAddrs = 0; //current number of addresses for this person
addrs = new Address*[10](); throws error, won't compile
//new dynamic array of pointers, initialize to NULL
}
Person::Person(const Person &p) //copy constructor
{
this->firstName = p.firstName;
this->lastName = p.lastName;
this->age = p.age;
this->telNum = p.telNum;
this->numAddrs = p.numAddrs;
delete [] addrs; //delete previous dynamically allocated memory
addrs = new Address*[10](); //throws error, won't compile
//new dynamic array of pointers, initialize to NULL
for (int i = 0; i<10; i++) //copy addresses to new object
{
this->addrs[i] = p.addrs[i];
}
}
【问题讨论】:
-
是
addrs = *new Address*[10]();它在您的代码中的实际显示方式,还是您添加了*s 来强调? -
for (int i=0; i < 10; i++) delete [] addrs;您正试图删除同一个指针 10 次。第一次工作,第二次表现出未定义的行为。 -
请不要注释掉您询问的代码部分。 SO 代码高亮使 cmets 变暗,使您很难看到对您的问题最重要的代码。
-
@IgorTandetnik 第一次也不行,因为
addrs是一个数组,而不是一个指针。 -
是的,*新地址*[10]();是它在代码中的样子。它抛出了一个错误并建议修复添加另一个 *
标签: c++ arrays pointers dynamic