C++ C++;随机0xC0000005错误
我制作了一个程序,将十进制数转换成其他数字系统,但有时会崩溃,我得到的错误代码是0xC0000005(程序仍然转换并输出所有数字)。有一件事我刚刚注意到,转换后的数字大于6个符号(或者这只是巧合)C++ C++;随机0xC0000005错误,c++,C++,我制作了一个程序,将十进制数转换成其他数字系统,但有时会崩溃,我得到的错误代码是0xC0000005(程序仍然转换并输出所有数字)。有一件事我刚刚注意到,转换后的数字大于6个符号(或者这只是巧合) 您得到未定义的行为是因为您的liekanos字符串从来没有任何大小或容量。您得到未定义的行为是因为您的liekanos字符串从来没有任何大小或容量 string liekanos; 默认情况下,字符串的大小为零。但是你试着 liekanos[j]=sk % p; 默认情况下,字符串的大小为零。但是
您得到未定义的行为是因为您的
liekanos
字符串从来没有任何大小或容量。您得到未定义的行为是因为您的liekanos
字符串从来没有任何大小或容量
string liekanos;
默认情况下,字符串的大小为零。但是你试着
liekanos[j]=sk % p;
默认情况下,字符串的大小为零。但是你试着
liekanos[j]=sk % p;
使用
liekanos[j]
可以访问索引j
处的元素,但由于您尚未指定此字符串的大小,所以很可能尝试访问不存在的元素。您可以在输入while
循环之前调用liekanos.resize(sk)
,以确保它不会发生
或者,如果您知道
liekanos
的最大可能大小,您可以将其声明为字符串liekanos(N,c)
其中,N
是它的大小,c
是其中每个字符的默认值。使用liekanos[j]
可以访问索引j
处的元素,但由于您没有指定此字符串的大小,所以您很可能试图访问不存在的元素。您可以在输入while
循环之前调用liekanos.resize(sk)
,以确保它不会发生
或者,如果您知道
liekanos
的最大可能大小,您可以将其声明为字符串liekanos(N,c)
其中N
是其大小,c
是其中每个字符的默认值。最好使用std::vector liekanos代码>而不是字符串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;
}
for(inti=0;i>sk>>p;
而(sk>0)
{
列卡诺斯。推回(sk%p);
sk/=p;
}
对于(长j=liekanos.size();j>=0;--j)
{
如果(liekanos[j]最好使用std::vector liekanos;
而不是字符串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;
}
for(inti=0;i>sk>>p;
而(sk>0)
{
列卡诺斯。推回(sk%p);
sk/=p;
}
对于(长j=liekanos.size();j>=0;--j)
{
如果(列卡诺斯[j]std::string
也有调整大小的功能。为什么不把它保持为std::string
?@Marlon:我的观点是,它被声明为字符串,但从未被用作一个字符串。std::string
也有调整大小的功能。为什么不把它保持为std::string
?@Marlon:我的观点是,它被声明为字符串,但从未被使用过用作一个。正如您所知,0xC0000005
是一个访问冲突(坏指针)错误。它通常意味着程序中的指针处理或内存分配有缺陷。正如您所知,0xC0000005
是一个访问冲突(坏指针)错误。这通常意味着程序中的指针处理或内存分配有缺陷。出于什么原因向量会更好?@Zyx2000我认为这里的std::vector
比std::string
更直观,因为我们一次处理一个字符并获得一组字符。从性能角度来看视图我认为两种解决方案都是相同的。std::string
如果我们需要做一些操作,比如连接两个表示,可能会更好。为什么向量会更好?@Zyx2000我认为这里的std::vector
比std::string
更直观,因为我们一次处理一个字符获取字符集合。从性能角度来看,我认为这两种解决方案是相同的。std::string
如果我们需要执行一些操作,例如连接两个表示,可能会更好。