运行时检查失败 #2,AND 数组值与输出交换不正确
Run Time Check Failure #2, AND array values swapped with outputs incorrectly
我已经为这篇文章苦苦挣扎了一段时间了。我已经用谷歌搜索了运行时检查失败,我不知道该怎么办。从我得到的,这是因为我声明了 swapEven 和 swapOdd 有一个大小为 0 的数组?我最初将其设置为指针数组,但这不起作用。有人可以指出我正确的方向吗?提前感谢!
void arrangeArrayJesseRagsdale(int* ary1, int* ary2, int arraySize1, int arraySize2) {
int i, j;
int temp;
int swap = 0;
int* swapEven = 0;
int* swapOdd = 0;
swapEven = new int[arraySize1];
swapOdd = new int[arraySize2];
cout << " Original Arraysn Array #1: ";
for (i = 0; i < arraySize1; i++) {
cout << ary1[i] << " ";
}
cout << endl << " Array #2: ";
for (i = 0; i < arraySize2; i++) {
cout << ary2[i] << " ";
}
cout << endl;
for (i = 0; i < arraySize1; i++) {
for (j = 0; j < arraySize2; j++) {
if (ary1[i] % 2 != 0) {
if (ary2[j] % 2 == 0) {
temp = swapOdd[i] = ary1[i];
ary1[i] = swapEven[i] = ary2[j];
ary2[j] = temp;
swap++;
}
}
}
}
cout << "n Updated Arraysn Array #1: ";
for (i = 0; i < arraySize1; i++) {
cout << ary1[i] << " ";
}
cout << endl << " Array #2: ";
for (i = 0; i < arraySize2; i++) {
cout << ary2[i] << " ";
}
cout << endl;
if (swap > 0) {
cout << "n Swapping info -n";
for (i = 0; i < swap; i++) {
cout << " Array #1 value " << swapOdd[i] << " swapped with Array #2 value " << swapEven[i] << endl;
}
}
cout << "nThere is/are " << swap << " swap(s)." << endl << endl;
delete[] swapEven;
delete[] swapOdd;
return;
}
首先,你的数组在这里:
int swapEven[] = {0};
int swapOdd[] = {0};
每个有 1 个元素。
其次,您的循环使用 arraySize1
和 arrraySize2
来索引到上面的数组中。 代码中没有任何检查来确保对这些数组的索引在边界内。 很可能,这是发生错误的地方,那就是越界访问数组。
如果您的目标是创建具有相同数量元素的数组,请使用std::vector
:
#include <vector>
//...
std::vector<int> swapEven(arraySize1, 0);
std::vector<int> swapOdd(arraySize2, 0);
代码的其余部分保持不变。
swapEven
和 swapOdd
的大小不为零,它们是包含单个整数元素的数组,0
.因此,这些数组的长度为 1。
我从您的代码中可以看出,您需要声明swapOdd
至少具有与ary1
一样多的元素。同样,swapEven
需要至少具有与ary2
一样多的元素。这是因为您使用 ary1
和 ary2
的索引在这些数组中存储值。写入未分配的内存可能会导致您看到的崩溃。
此外,使用 2 个数组的索引将导致交换的值以 swapOdd
和 swapEven
进行不连续的存储。这样做的影响是,交换报告代码在生成报告时将使用错误的数组元素。
最好使用动态"列表"数据结构来累积交换的元素。C++那里有一些替代方案,例如 list
和 vector
,可以使用它们来代替交换数组。
另一件事,与其使用指针算法来访问数组ary1
和ary2
的元素,不如使用数组索引更具可读性,即
ary[i]
而不是
*(ary1 + i)
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 不正确的比较和交换计数器输出用于快速排序功能
- 快速排序中的交换函数给出错误的输出
- 为什么我在字符串交换程序中得到错误的输出
- 部分透视/高斯消除 - 交换列而不是产生错误输出的行
- 运行时检查失败 #2,AND 数组值与输出交换不正确
- 使用指针交换两个字符串会输出奇怪的输出