获取"分段错误:尝试将字符串写入 setter 时核心转储
Getting "Segmentation Fault: core dumped when trying to write string to setter
我有一个调整大小的动态对象数组。调整大小后,我可以调用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
。这就是为什么会发生撞车。
相关文章:
- 分段故障(堆芯转储)矢量
- Cppcheck生成xml转储文件
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 浮点异常(核心转储)#694457
- 分段错误(核心转储)但无法弄清楚
- 链接到libkcapi时没有核心转储
- 检测到堆栈粉碎:已终止 中止(核心已转储)
- 正在处理故障(堆芯转储)
- 分段错误(核心转储) - 使用 SavedModel 的 Tensorflow C++ API 进行推断
- 我不知道为什么这段代码会让核心被转储?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在基数排序中,我得到 munmap_chunk():无效指针和中止(核心转储).为什么?
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到 class4.exe.sta
- C++快速将 int 数组内容转储到文本文件中
- 合并排序:分段错误核心转储
- 获取"分段错误:尝试将字符串写入 setter 时核心转储