运行时错误线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x7fff5f006576)

时间:2015-02-25 05:31:13

标签: c++ runtime-error

我正在尝试在Xcode上编写一个函数,它以非递增的顺序组合了两个非增加的字符串数组,但每当我尝试编译时,我都会遇到此错误。我很新,不知道为什么会这样。感谢任何帮助。谢谢。

#include <iostream>
#include <string>
using namespace std;

int merge(const string a1[], int size1, const string a2[], int size2, string
          result[], int size){
    int index1 = 0, index2 = 0;
    for (int i = 0; i < size1+size2; i++) {
        if (a1[index1] > a2[index2]) {
            result[i] = a1[index1];
            index1++;
        } else {
            result[i] = a2[index2];
            index2++;
        }
    }
    return size1 + size2;
}

int main() {
    string a[4] = {"fgh", "ccc", "abc", "aaa"};
    string b[3] = {"pqr", "def", "bcd"};
    string z[30];
    merge (a, 4, b, 3, z, 30);
    for (int i = 0; i < 7; i++)
        cout << z[i] << ", ";
    return 0;
}

2 个答案:

答案 0 :(得分:0)

虽然我没有执行该程序,但看起来你的逻辑是错误的。 如果a1 [index1]总是小于a2 [index2],那么你将继续增加index2,甚至超过size2。当你试图比较“abc”和“bcd”时,我猜这就是你的情况,这里index2会增加到3,而且没有a2 [3]。 请调试你的程序。

答案 1 :(得分:0)

合并功能中的逻辑错误。此外,merge是一个根据函数定义返回integer data的函数。但是在main函数中,它看起来像是一个返回void的函数。 你得到的运行时错误,因为当a2 [index2]试图访问无效的a2 [4]时! 因此,请使用以下代码段替换代码。

#include <iostream>
#include <string>
using namespace std;

int merge(const string a1[], int size1, const string a2[], int size2, string
    result[], int size){
    int index1 = 0, index2 = 0;
    for (int i = 0; i < size1+size2; i++) {
        if (a1[index1] > a2[index2]) {
            result[i] = a1[index1];
            index1++;
        }
        else {
            result[i] = a2[index2];
            index2++;
        }
    }
    return size1 + size2;
}

int main() {
    int res;
    string a[4] = { "fgh", "ccc", "abc", "aaa" };
    string b[4] = { "pqr", "def", "bcd" };
    string z[30];
    res = merge(a, 4, b, 3, z, 30);
    for (int i = 0; i < 7; i++)
        cout << z[i] << ", ";
    return 0;
}

我希望它现在能正常运作!