尝试添加两个整数但向量错误

Posted

技术标签:

【中文标题】尝试添加两个整数但向量错误【英文标题】:Trying to add two integers but vector error 【发布时间】:2015-12-27 18:27:17 【问题描述】:

我一直在尝试将两个数字读取为字符串,将它们转换为 int 向量,然后将它们添加到我在学校的实验室中。我已经尝试添加 1 + 1 来发现这个错误:

调试断言失败!

程序:C:\windows\SYSTEM32\MSVCP140D.dll 文件:c:\program 文件 (x86)\microsoft visual studio 14.0\vc\include\xstring 行:1681

表达式:向量下标超出范围

有关您的程序如何导致断言的更多信息 失败,请参阅有关断言的 Visual C++ 文档。

(按重试调试应用程序)

我已尝试重试,但它打开了另一个对话框,提示调试已到达断点,此时我无法继续调试。这是我的代码,供您感兴趣的人使用(Microsoft Visual Studio 编译器):

#include <iostream>
#include <vector>
#include <string>

using namespace std;

void input(string &largeString1, string &largeString2);
void convert(string largeString1, string largeString2, vector<int> &largeInt1, vector<int> &largeInt2);
int asciiToInt(char ch);
void add(vector<int> largeInt1, vector<int> largeInt2, vector<int> &finalInt);
void output(const vector<int> finalInt);

int main()

    string largeString1;
    string largeString2;
    vector<int> largeInt1(12, 0);
    vector<int> largeInt2(12, 0);
    vector<int> finalInt(13, 0);

    for (int i = 0; i < 4; i++)
    
        input(largeString1, largeString2);
        convert(largeString1, largeString2, largeInt1, largeInt2);
        add(largeInt1, largeInt2, finalInt);
        output(finalInt);
    

    system("pause");

    return 0;

void input(string &largeString1, string &largeString2)

    cout << "Input:" << endl << endl;
    cin >> largeString1;
    cin >> largeString2;

void convert(string largeString1, string largeString2, vector<int> &largeInt1, vector<int> &largeInt2)

    int size1 = size(largeString1);
    int size2 = size(largeString2);
    for (int i = 0; i < 12; i++)
    
        int dynamicsize1 = size1 - i;
        largeInt1[11 - i] = asciiToInt(largeString1[dynamicsize1 ]);
    
    for (int j = 0; j < 12; j++)
    
        int dynamicsize2 = size2 - j;
        largeInt2[11 - j] = asciiToInt(largeString2[dynamicsize2 ]);
    

int asciiToInt(char ch)

    return (ch - '0');

void add(vector<int> largeInt1, vector<int> largeInt2, vector<int> &finalInt)

    for (int i = 0; i < 12; i++)
    
        if (largeInt1[11 - i] + largeInt2[11 - i] >= 10)
        
            finalInt[12 - i] = finalInt[12 - i] + largeInt1[11 - i] + largeInt2[11 - i] - 10;
            finalInt[12 - i - 1] = 1;
        
        else
            finalInt[12 - i] = finalInt[12 - i] + largeInt1[11 - i] + largeInt2[11 - i];
    

void output(const vector<int> finalInt)

    cout << endl << "Output:" << endl << endl << "The sum is: ";
    for (int i = 0; i < 13; i++)
    
        cout << finalInt[i];
    
    cout << endl << endl;

【问题讨论】:

我不太确定,但我认为我的问题可能在于我的 add 或 convert 函数,但我不知道到底出了什么问题:( 与其让convert 转换两个字符串,不如让它只转换一个字符串,然后调用它两次(使用不同的参数)。 代码的哪一行导致断言(查看调用堆栈)?它试图访问字符串的哪个元素,字符串有多少个元素? 【参考方案1】:

用它来转换你的字符串:

void convert(string largeString1, string largeString2, vector<int> &largeInt1, vector<int> &largeInt2)

    int size1 = largeString1.size();
    int size2 = largeString2.size();
    for (int i = 0; i < size1; i++)
    
        largeInt1[11 - i] = asciiToInt(largeString1[size1-1-i]);
    
    for (int j = 0; j < size2; j++)
    
        largeInt2[11 - j] = asciiToInt(largeString2[size2-1-j]);
    

【讨论】:

以上是关于尝试添加两个整数但向量错误的主要内容,如果未能解决你的问题,请参考以下文章

将向量的整数内容打印为字符串会导致分段错误 [关闭]

试图读取包含整数的文件并存储在整数向量中,但我不断收到“分段错误(核心转储)”错误

C:矩阵向量乘积,两个双数相乘给出错误符号

这段代码有啥错误,在二维向量中如何添加额外的元素?

推送到成员向量时的段错误

尝试初始化结构向量时出现编译错误