C++随机0xC0000005错误
C++ random 0xC0000005 errors
我制作了一个程序,将n十进制数sk转换为其他数值系统p,但有时它会崩溃,我得到的错误代码是0xC0000005(程序仍然转换并输出所有数字)。有一件事我刚刚注意到,当转换后的数字超过6个符号时,就会发生这种情况(或者这只是巧合)。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
long n,sk,p,j;
string liekanos;
ifstream f("u1.txt");
f >> n;
for (int i=0;i<n;i++)
{
f >> sk >> p;
j=0;
while (sk>0)
{
liekanos[j]=sk % p;
sk/=p;
j++;
}
for (j>=0;j--;)
{
if (liekanos[j]<10)
cout<<int(liekanos[j]);
else cout<<char(liekanos[j]+55);
}
cout<<endl;
}
return 0;
}
示例输入:
3
976421618 7
15835 24
2147483647 2
使用liekanos[j]
可以访问索引j
处的元素,但由于尚未指定该字符串的大小,因此很可能会尝试访问不存在的元素。您可以在进入while
循环之前调用liekanos.resize(sk)
,以确保它永远不会发生。
或者,如果您知道liekanos
的最大可能大小,您可以将其声明为string liekanos(N, c);
,其中N
是其大小,c
是其中每个字符的默认值。
由于liekanos
字符串从来没有任何大小或容量,因此您得到了未定义的行为。
string liekanos;
默认情况下,字符串的大小为零。但是你尝试
liekanos[j]=sk % p;
最好使用std::vector<char> liekanos;
而不是string liekanos;
。你需要在你的代码中做一些修改:
for (int i=0; i<n; i++)
{
std::vector<char> liekanos;
f >> sk >> p;
while (sk>0)
{
liekanos.push_back(sk % p);
sk/=p;
}
for (long j = liekanos.size(); j>=0; --j)
{
if (liekanos[j]<10)
cout<<int(liekanos[j]);
else cout<<char(liekanos[j]+'a');
}
cout<<endl;
}
相关文章:
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 进程返回 -1073741819 (0xC0000005) 错误
- C++ rezing 动态数组最多可以处理一定数量的元素,但在某些时候会崩溃并显示错误 (0XC0000005)
- OPENCV.3.0错误:0xc0000005:访问违规读取位置0x00000000
- 如何修复数据库连接的C 程序运行时间错误(0xc0000005)
- 多线程动画0xC0000005错误
- 什么是错误 (0xC0000005) 以及如何修复它
- Visual Studio C++ 0xC0000005错误:对内存分配感到困惑
- C 错误:0xc0000005:访问违规写作位置0xfeeefeee
- C++数组错误:访问冲突读取位置0xC0000005
- 运行时错误0xC0000005 - 访问冲突
- 错误 linkedlist .exe 中0x00D0345E处的未处理异常: 0xC0000005:访问违规写入位置0x
- C++随机0xC0000005错误
- 我收到此错误"Unhandled exception at 0x009437bd in Hash functions.exe: 0xC0000005: Access violation reading
- JRE检测到致命错误- EXCEPTION_ACCESS_VIOLATION (0xc0000005)
- 无法在 ADO OLEDB 中捕获 CommitTrans 当它给出0xc0000005错误时
- C++,错误,本机"已退出,代码为 -1073741819 (0xc0000005)
- 从C#调用非托管C++库(dll)会产生访问冲突错误(0xc0000005)
- Visual Studio 2012 错误 0xC0000005 数组输出
- VS2013错误0xC0000005:当使用libcurl