【问题标题】:Run Time Check Failure #2 S C++ [closed]运行时检查失败#2 S C++ [关闭]
【发布时间】:2016-08-24 01:09:11
【问题描述】:

我在使用 C++ 程序时遇到问题。它一直给我一个运行时错误#2 - S。它构建得很好。它构建良好。 Main 应该调用另外两个函数,一个将整数放入数组中,另一个将数组中数字的位置反转,本质上是创建一个“反转”数组。

#include "stdafx.h"
#include <iostream>
#include <array>
using namespace std;

void storeArray(int[], int);
void flipArray(int[], int);

int main()
{
const int arraysize = 10;
int foo[arraysize]; // everyone seems to use foo so I thought I'd try it

storeArray(&foo[arraysize], arraysize);

cout << endl;

flipArray(&foo[arraysize], arraysize);

return 0;
}

void storeArray(int foo[], int arraysize)
{
int counter;
counter = 0;

while (counter < arraysize)
{

    cout << "Enter number " << (counter+1) << " : ";
    cin >> foo[counter];        counter++;

}

return;
 }

void flipArray(int foo[], int arraysize)
{

int counter2;
int counter3;

counter2 = 0;
counter3 = 9;

for (counter2; counter2 <= 9; counter2++)
{

    cout << "Value number " << (counter2 + 1) << " is " << foo[counter3] << endl;

    counter3--;

}

cout << endl;

return;
}

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 您将数组末尾的地址传递给您的函数,请使用storeArray(foo, arraysize);flipArray(foo, arraysize);

标签: c++ arrays pass-by-value


【解决方案1】:

storeArray(&foo[arraysize], arraysize);

这会传递地址刚刚过去foo的结尾

改为使用:

storeArray(foo, arraysize);  

还有:

void storeArray(int* foo, int arraysize)

同样适用于:

flipArray(&foo[arraysize], arraysize);

编辑:刚刚注意到您是 #include &lt;array&gt; 并使用 C 样式的数组。不是#include &lt;array&gt;中定义的C++ STL数组

【讨论】:

  • storeArray 不需要更改。
  • @user657267 是的,但这不是惯用的,为什么要鼓励这样做?
  • 暗示函数需要一个数组不是惯用的吗?
  • @user657267 传递指针是惯用的。
猜你喜欢
  • 2013-02-26
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多