使用向量的函数崩溃,调试器说访问冲突读取位置
Function using vectors crashes, debugger says Access violation reading location
在我说什么之前,让我发布我的代码。
string formatNumber(llint num){
if (num <= 999) return to_string(num);
vector<char> c;
for (int i = 0; i <= to_string(num).length()-1; i++) {
c.push_back(to_string(num)[i]);
}
auto it = c.end();
for (int i = c.size() - 1; i >= c.size() - 1; i--) {
if (i >= 3 && i % 3 == 0) {
it = c.insert(it + i, ',', 1);
}
it--;
}
string Return;
for (int i = 0; i <= c.size(); i++) {
Return += c[i];
}
return Return;
}
此函数的重点是格式化数字多于三的数字,使其更容易阅读。像这样:1000 将变成 1,000。基本上,它从左起每 3 位数字添加一个逗号。我的问题是我的程序如何崩溃并引发此异常:
Exception thrown at 0x00007FFC24A2C447 (vcruntime140.dll) in RESL.exe: 0xC0000005: Access violation reading location 0x00000223F53C2000.
不知道如何解决这个问题,你会,堆栈溢出的好心人帮助我吗?
您不需要std::vector<char>
因为std::string
本身具有您需要的所有功能。使用字符串将消除大部分代码,您只需要一个循环:
std::string s = std::to_string( num );
const auto size = s.length(); // we need to keep it as it would change on insertion
for( size_t i = 3; i < size; i += 3 )
s.insert( size - i, 1, ',' );
代码中的错误太多,例如:
-
您需要知道的第一件事是,当您对顺序容器执行插入/删除操作时,迭代器可能无效。
-
最后一个
for
循环中i <= c.size()
语句应i < c.size()
。
实际上,您不需要使用其他vector<char>
。只需使用to_string
生成的字符串就足够了。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- SDL2 |包装器类访问冲突
- Visual Studio图形调试器引发读取访问冲突异常
- 使用向量的函数崩溃,调试器说访问冲突读取位置
- 启用 MSVC 调试迭代器时堆栈分配器访问冲突
- 在VS2017上调试简单程序时访问冲突(RtlActivateActivationContextUnsafeFast)
- GDB 调试器访问未找到的文件
- C++字符串表达式求解器遇到访问冲突
- VS 2010中的C++调试访问冲突
- 调试优先级队列程序时出现访问冲突错误
- 仅在调试时std::string析构函数中存在访问冲突
- C++2D矢量声明和来自调试器的元素访问
- 内存管理器-访问冲突写入位置异常
- OpenCL - c++包装器-动态库中的上下文取消初始化导致访问冲突
- 调试访问冲突
- excelc++通信器API: _ChartPtr访问冲突
- 调试器无法访问库代码(GDCM)
- ..处的首次机会异常:读取位置时发生访问冲突..当使用Visual Studio 2010进行调试时
- 在优化的生成中发现访问冲突,但该冲突未显示在调试生成(gcc)中
- 如何调试/修复访问冲突(堆损坏)