如何修复我的代码,以免收到 C6385 警告?

How can I fix my code so I don't get a C6385 warning?

本文关键字:C6385 警告 何修复 我的 代码      更新时间:2024-09-30

我的代码中有一个C6385警告。我想看看两个数组是否相等。我一直得到的警告是在if(p[I]==inputGuess[j](的行上。我试过重做这些线条,但一直收到同样的警告。有人知道我做错了什么吗。这也是我第一次用C++编程。

#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include "Game.h"
#include <iostream>
#include <iomanip>
using namespace std;
int* generateNumbers(int n, int m) {
// Intialize random number
srand(static_cast<unsigned int>(time(NULL)));
// Declare array size to generate random numbers based on what is between 1 to (m)
int* numbers = new int[n];
for (int i = 0; i < n; i++) {
numbers[i] = (rand() % m) +1;
cout << numbers[i]<< "  " << endl;
}
return numbers;

}
void Game::guessingGame(int n, int m) {
int* p;
int sum = 0;
// Call the generateNumber function
generateNumbers(n, m);

// Declare array based on user guesses
inputGuess = new int[n];
p = generateNumbers(n,m);
for (int i = 0; i < n; i++) {
cin >> inputGuess[i];
}
// See if the user guesses and computers answers match up
for (int i = 0; i < n; i++) {
for (int j = 0; i < n; j++) {
if (p[i] == inputGuess[j]){  //Where I keep getting the C6385 Warning
sum++;
break;
}
}
}

}

C6385警告文件指出:

缓冲区的可读范围可能小于使用的索引从中读取。尝试读取有效范围之外的数据会导致缓冲区溢出。

https://learn.microsoft.com/en-us/cpp/code-quality/c6385?view=msvc-160

您的第二个if语句比较i < n而不是j < n,并且由于i在内部从未被修改,因此它将永远运行。这会导致警告,因为您将访问超出范围的内存。修复比较。