Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.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++程序有问题。它是一个BigInt类,接收字符串作为输入,并将每个数字设置为动态数组。到目前为止,我所要做的就是输入一个BigInt,然后输出它…非常简单。我的程序编译和运行很好,但一旦我输入第一个输入,它就会给我一个奇怪的错误……”这个应用程序请求运行时以一种不寻常的方式终止它。 有关详细信息,请与应用程序的支持团队联系。”_C++ - Fatal编程技术网

奇怪的运行时错误 我运行我的裸露C++程序有问题。它是一个BigInt类,接收字符串作为输入,并将每个数字设置为动态数组。到目前为止,我所要做的就是输入一个BigInt,然后输出它…非常简单。我的程序编译和运行很好,但一旦我输入第一个输入,它就会给我一个奇怪的错误……”这个应用程序请求运行时以一种不寻常的方式终止它。 有关详细信息,请与应用程序的支持团队联系。”

奇怪的运行时错误 我运行我的裸露C++程序有问题。它是一个BigInt类,接收字符串作为输入,并将每个数字设置为动态数组。到目前为止,我所要做的就是输入一个BigInt,然后输出它…非常简单。我的程序编译和运行很好,但一旦我输入第一个输入,它就会给我一个奇怪的错误……”这个应用程序请求运行时以一种不寻常的方式终止它。 有关详细信息,请与应用程序的支持团队联系。”,c++,C++,我不知道该如何处理这个问题,因为我无法在代码中找到任何缺陷 有人有什么想法吗 这是我的密码: 头文件: #ifndef BIGINT_H #define BIGINT_H #include <iostream> namespace JHall{ class BigInt { public: BigInt(std::string s = ""); BigInt(const BigInt& b); ~BigInt(); void operato

我不知道该如何处理这个问题,因为我无法在代码中找到任何缺陷

有人有什么想法吗

这是我的密码:

头文件:

#ifndef BIGINT_H
#define BIGINT_H

#include <iostream>

namespace JHall{
class BigInt {
public:
    BigInt(std::string s = "");
    BigInt(const BigInt& b);
    ~BigInt();
    void operator =(const BigInt& b);
    friend std::istream& operator >>(std::istream& in, BigInt& b);
    friend std::ostream& operator <<(std::ostream& out, const BigInt& b);

private:
    short* num;
    int cap;
    int size;

};
}
#endif  /* BIGINT_H */
\ifndef BIGINT\u H
#定义BIGINT_H
#包括
名称空间JHall{
类BigInt{
公众:
BigInt(std::string s=“”);
比吉特(康斯特比吉特&比吉特);
~BigInt();
void运算符=(常量BigInt&b);
friend std::istream&operator>>(std::istream&in,BigInt&b);
friend std::ostream&operator>(std::istream&in、BigInt&b)
{
std::字符串s;
在>>年代;
b、 尺寸=s.长度();
整数计数=0;
对于(int i=b.size-1;i>=0;i--)
b、 num[count++]=strtol(s.substr(i-1,1).c_str(),NULL,10);
返回;
}
std::ostream&operator此行错误:

for(int i = b.size-1; i >= 0; i--)
    b.num[count++] = strtol(s.substr(i-1,1).c_str(),NULL,10);
当i等于零时,您要求从-1开始的子字符串。

这一行是错误的:

for(int i = b.size-1; i >= 0; i--)
    b.num[count++] = strtol(s.substr(i-1,1).c_str(),NULL,10);

当i等于0时,您要求从-1开始的子字符串。

一个明显的错误是,您没有在复制构造函数中分配内存:如果每次都使用,您很可能会发生崩溃。另一个相对明显的错误是,您假设最多有100个数字,这似乎是一个不必要的限制gnment操作符在通常情况下复制两次值时似乎做了不必要的工作。此外,使用子字符串和
strtol()
将单个数字从
char
转换为
short
似乎有点过火。正确的方法是使用

int value = s[i] - '0';

也应考虑在构造函数中使用成员初始化器列表。当然,如果你有一个工作拷贝构造函数,你也可能想要实现一个<代码> SWAP()/<代码>方法,然后在赋值运算符中使用它:

BigInt& BigInt::operetor= (BigInt const& other) {
    BigInt(other).swap(*this);
    return *this;
}

一个明显的错误是,您没有在复制构造函数中分配内存:如果每次都使用,则很可能会发生崩溃。另一个相对明显的错误是,您假设最多有100位数字,这似乎是一个不必要的限制。赋值运算符似乎在复制他计算了两次值。此外,使用子字符串和
strtol()
将单个数字从
char
转换为
short
似乎有点过分。正确的方法是使用

int value = s[i] - '0';

也应考虑在构造函数中使用成员初始化器列表。当然,如果你有一个工作拷贝构造函数,你也可能想要实现一个<代码> SWAP()/<代码>方法,然后在赋值运算符中使用它:

BigInt& BigInt::operetor= (BigInt const& other) {
    BigInt(other).swap(*this);
    return *this;
}

是的,在调试器中运行它,看看它在哪里断开。当它碰到我的第一个cin>>b1时,它断开了;我不太确定为什么,因为我已经正确地重载了>>操作符来读取我的BIGINT。是的,在调试器中运行它,看看它在哪里断开了。当它碰到我的第一个cin>>b1时,它断开了;我不太确定为什么,因为我已经正确地重载了>>操作符阅读我的Bigint感谢您提供了这些有用的观察结果。我一定会根据您所说的来修复我的代码。我对您如何将该整数值分配给该字符非常感兴趣。我从未见过这种情况,也不知道这是可能的,非常感谢!我可以问一下这到底是如何工作的吗?(将该字符分配给整数)
char
只是整数。
'0'
是数字序列的基值,也就是说,其他数字的值都是从
'0'
开始的。也就是说,
'1'='0'+1
'2'='0'+2
,等等。你可以通过明显的转换利用它:
1='1'-'0'
,等等。我的错误是将整数赋给一个字符…相同的差异。此外,我替换了我的子字符串和strtol()使用你的想法,它没有完全正确地工作。当我输入12345作为我的BigInt时,我得到254492345作为我的输出。当它应该是54321时,因为我将它们向后存储。感谢你这些有用的观察结果。我一定会根据你所说的来修复我的代码。我对你如何将整数值分配给字符非常感兴趣。我我从未见过这个,也不知道这是可能的,非常感谢!我可以问一下它到底是如何工作的吗?(将字符指定给整数)
char
只是整数。
'0'
是数字序列的基值,也就是说,其他数字的值都是从
'0'
开始的。也就是说,
'1'='0'+1
'2'='0'+2
,等等。你可以通过明显的转换利用它:
1='1'-'0'
,等等。我的错误是指将整数指定给字符…相同的差异。此外,我用您的想法替换了我的子字符串和strtol(),但效果不太好。当我输入12345作为BigInt时,我得到254492345作为我的输出。当它应该是54321时,因为我正在向后存储它们。