0

我有一个我调整大小的动态对象数组。调整大小后,我可以调用 int 和 double 对象的 set 方法,但不能调用任何带有字符串对象的 setter。每当我尝试在调整大小的数组中调用新索引的设置器时,我都会得到一个核心转储。

这是生成错误的代码的主要部分。

void resizeAccounts(int newSize, Account *accounts, int acctNum, std::string fName,     :string lName, std::string acctP, double balance)
{       
Account* newArr = new Account[newSize];

for (int i=0; i<newSize-1; i++)
    newArr[i]=accounts[i];

delete [] accounts;
accounts = newArr;
accounts[newSize].setAccountNum(acctNum);
accounts[newSize].setFirstName(fName);
accounts[newSize].setLastName(lName);
accounts[newSize].setAccountPassword(acctP);
accounts[newSize].setBalance(balance);

for(int i=0; i<newSize; i++)
    std::cout << accounts[i].getAccountNum() << std::endl;

我正在使用的二传手

void Account::setFirstName( std::string fName) 
{ firstName = fName; }
void Account::setLastName( std::string lName )
{ lastName = lName; }
void Account::setAccountPassword( std::string acctPass)
{ accountPassword = acctPass; }
void Account::setAccountNum( int acctNum)
{ accountNum = acctNum; }
void Account::setBalance( double bal)
{ balance = bal; }`

这是作业,我不允许使用向量或大多数 STL 库。谢谢,

4

2 回答 2

5

数组索引从0to运行,N - 1因此:

accounts[newSize].setAccountNum(acctNum);
      //^^^^^^^^^

正在访问数组末尾的一个,导致未定义的行为。因此,有效索引accounts0to newSize - 1

由于std::vector不允许,我不会提及它。完全没有。

于 2013-02-28T22:16:34.410 回答
0

C++ 使用基于 0 的数组。这意味着当您分配大小数组时,10第一个元素位于 index 处0,最后一个元素位于 index 处9。在这种情况下,您要分配一个大小数组,newSize然后访问该newSize元素。这不是数组的一部分,因为最后一个元素是newSize - 1. 这就是为什么你会崩溃。

于 2013-02-28T22:18:13.853 回答