Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;随机0xC0000005错误_C++ - Fatal编程技术网

C++ C++;随机0xC0000005错误

C++ C++;随机0xC0000005错误,c++,C++,我制作了一个程序,将十进制数转换成其他数字系统,但有时会崩溃,我得到的错误代码是0xC0000005(程序仍然转换并输出所有数字)。有一件事我刚刚注意到,转换后的数字大于6个符号(或者这只是巧合) 您得到未定义的行为是因为您的liekanos字符串从来没有任何大小或容量。您得到未定义的行为是因为您的liekanos字符串从来没有任何大小或容量 string liekanos; 默认情况下,字符串的大小为零。但是你试着 liekanos[j]=sk % p; 默认情况下,字符串的大小为零。但是

我制作了一个程序,将十进制数转换成其他数字系统,但有时会崩溃,我得到的错误代码是0xC0000005(程序仍然转换并输出所有数字)。有一件事我刚刚注意到,转换后的数字大于6个符号(或者这只是巧合)


您得到未定义的行为是因为您的
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
如果我们需要执行一些操作,例如连接两个表示,可能会更好。