你能解释一下什么运行时错误是如何解决它的吗?

Can you explain what run time error is how to fix it

本文关键字:何解决 解决 运行时错误 能解释 一下 什么      更新时间:2023-10-16
void adde(int& v, char array[5])
{
if (v > 5) {
v = -1;
}
for (int k = 0; k < 5; k++) {
if (array[k] == 'C') {
array[k] = '-';
}
}
v++;
array[v] = 'C';
}

这是我的职能

int mov = -1;
char item[5];
for (int i = 0; i < 5; i++) {
item[i] = '-';
}
cout << "Initially " << endl;
for (int i = 0; i < 5; i++) {
cout << "[" << i + 1 << " ] ";
}
cout << endl;
for (int j = 0; j < 5; j++) {
cout << item[j] << "    ";
}
cout << endl;
cout << "After Item 1, " << endl;
adde(mov, item);
for (int j = 0; j < 5; j++) {
cout << item[j] << "    ";
}
cout << endl;
cout << "After Item 2, " << endl;
adde(mov, item);
for (int j = 0; j < 5; j++) {
cout << item[j] << "    ";
}
cout << endl;
cout << "After Item 3, " << endl;
adde(mov, item);
for (int j = 0; j < 5; j++) {
cout << item[j] << "    ";
}
cout << endl;
cout << "After Item 4, " << endl;
adde(mov, item);
for (int j = 0; j < 5; j++) {
cout << item[j] << "    ";
}
cout << endl;
cout << "After Item 5, " << endl;
adde(mov, item);
for (int j = 0; j < 5; j++) {
cout << item[j] << "    ";
}
cout << endl;

我的代码在这里工作正常。 在最后一项之后,我希望我的光标指向第一个索引 但显示奇怪的库运行时错误 运行此突出显示的代码部分后 cout <<"在第 6 项之后,"<<结尾;

阿德(移动,项目(;

for (int j = 0; j <5; j++( { cout <<item[j] <<" "; } }

>标题##You 犯了一个简单的错误。这里不需要去虫器。C/C++ 中的数组以索引 0 开头。因此,如果你有一个大小为 5 的数组,就像你的示例char item[5];一样,有效的索引是 0,1,2,3,4。但不是5。

在你的函数adde中,你只是有错误的边界检查。在你的第一句话中,你写道:

if (v > 5) {

然后后来

v++;
array[v] = 'C';

因此,如果v为>3,例如 4 或 5,您将递增它并访问array[5]array[6],这超出了界限并产生错误。

您可以简单地更正它并使用

if (v > 3) {

正如你的第一句话。这将解决问题:

#include <iostream>
void adde(int& v, char array[5])
{
if (v > 3) {
v = -1;
}
for (int k = 0; k < 5; k++) {
if (array[k] == 'C') {
array[k] = '-';
}
}
v++;
array[v] = 'C';
}
int main() {
int mov = -1;
char item[5];
for (int i = 0; i < 5; i++) {
item[i] = '-';
}
std::cout << "Initially " << std::endl;
for (int i = 0; i < 5; i++) {
std::cout << "[" << i + 1 << " ] ";
}
std::cout << std::endl;
for (int j = 0; j < 5; j++) {
std::cout << item[j] << "    ";
}
std::cout << std::endl;
std::cout << "After Item 1, " << std::endl;
adde(mov, item);
for (int j = 0; j < 5; j++) {
std::cout << item[j] << "    ";
}
std::cout << std::endl;
std::cout << "After Item 2, " << std::endl;
adde(mov, item);
for (int j = 0; j < 5; j++) {
std::cout << item[j] << "    ";
}
std::cout << std::endl;
std::cout << "After Item 3, " << std::endl;
adde(mov, item);
for (int j = 0; j < 5; j++) {
std::cout << item[j] << "    ";
}
std::cout << std::endl;
std::cout << "After Item 4, " << std::endl;
adde(mov, item);
for (int j = 0; j < 5; j++) {
std::cout << item[j] << "    ";
}
std::cout << std::endl;
std::cout << "After Item 5, " << std::endl;
adde(mov, item);
for (int j = 0; j < 5; j++) {
std::cout << item[j] << "    ";
}
std::cout << std::endl;
std::cout << "After Item 6, " << std::endl; 
adde(mov, item);
for (int j = 0; j < 5; j++) {
std::cout << item[j] << "    ";
}
std::cout << std::endl;
return 0;
}

另外请注意:

设计不是很好。请不要在C++中使用 C 样式数组。请避免在调用函数时指针衰减。请重新考虑您的完整设计。我可以看到,你在做什么。这在C++中可以更容易地完成,但对于一个真正好或合适的解决方案,我们需要知道要求。