获取"分段错误:尝试将字符串写入 setter 时核心转储

Getting "Segmentation Fault: core dumped when trying to write string to setter

本文关键字:setter 转储 核心 字符串 分段 错误 获取      更新时间:2023-10-16

我有一个调整大小的动态对象数组。调整大小后,我可以调用int和double对象的set方法,但不能调用string对象的setter方法。每当我尝试为调整大小的数组中的新索引调用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;

我使用的setter

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库。谢谢你,

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

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

正在访问数组的末尾,导致未定义的行为。因此,accounts的有效指标为0 ~ newSize - 1

由于std::vector是不允许的,我就不提它了。div。

c++使用基于0的数组。这意味着当你分配一个大小为10的数组时,第一个元素的索引是0,最后一个元素的索引是9。在本例中,分配一个大小为newSize的数组,然后访问newSize元素。这不是数组的一部分,因为最后一个元素是newSize - 1。这就是为什么会发生撞车。