如何修复我的代码,以免收到 C6385 警告?
How can I fix my code so I don't get a C6385 warning?
我的代码中有一个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
在内部从未被修改,因此它将永远运行。这会导致警告,因为您将访问超出范围的内存。修复比较。
相关文章:
- 警告处理为错误这里有什么问题
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 使用typeid警告未使用的变量
- 示例C++项目编译中的警告
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 如何修复编译器警告 C6386 和 C6385?
- 返回语句后的代码,没有警告
- 获取隐式转换溢出从无符号到已签名的警告
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 在未链接的部分上生成警告
- 警告 C4552:">>":未使用表达式的结果
- Visual Studio 中的警告 C6385
- 如果尝试使用功能,则收到警告 C6385
- 为什么在Visual Studio 2012上的代码分析中,此代码会发出缓冲区溢出警告(C6385/C6386)