简体   繁体   English

解决 C++ 中潜在的假阴性 C6385 错误

[英]Resolving potential false negative C6385 Error in C++

This question is most likely common and has been asked before.这个问题很可能很常见,并且之前已经被问过。 So, after spending a mind-numbing 30 minutes trying to find the solution to what I believe is a false negative, I'm resulting to posting my issue here.因此,在花费了令人麻木的 30 分钟试图找到解决我认为是假阴性的解决方案之后,我将在此处发布我的问题。

I'm relatively new to C++ Coding and figured I'd create a simple random item generator.我对 C++ 编码比较陌生,我想我会创建一个简单的随机项目生成器。 Unfortunately, when grasping a random index in my arrays, I am given a c6385 error.不幸的是,当我在我的数组中获取一个随机索引时,我得到了一个 c6385 错误。 This error usually pertains to an invalid or overloaded buffer from the research I've found.此错误通常与我发现的研究中的无效或过载缓冲区有关。 I believe this means that the index I'm trying to access is too large thanks to rand().我相信这意味着我试图访问的索引太大了,这要归功于 rand()。

I will continue looking for a solution but would like some others' opinions of the situation.我将继续寻找解决方案,但希望得到其他人对这种情况的看法。 I may be overlooking a small detail or am failing to grasp a concept.我可能忽略了一个小细节,或者没有掌握一个概念。 All help is greatly appreciated.非常感谢所有帮助。 If I come across a solution, I will lock/remove this to overpopulate the forums.如果我遇到解决方案,我将锁定/删除它以使论坛人满为患。

Here is my code: ItemGeneration.h这是我的代码:ItemGeneration.h

#pragma once
#include <random>
#include <iostream>
using namespace std;

class ItemGeneration
{
public:
    /*
        Creating the cosntant variables for the items main effects.
        For instance, if you were to roll the main attribute of "Item1",
        this code would dictate what possible attributes that could be chosen.

        In addition to the main attributes, the code for the avaliable sub-attributes is also created below.

        Also creating the const array that hold the rarity of items.
        For instance, an item that rolls a higher weighted value will have a lower rating.
        More rare or 'uncommon' the value, the higher rating the item will recieve.
        Item rarity dictates the value of the attributes assigned to ie, i.e the higher the
        rarity the higher the attributes multiplier in addition to the number of sub-attributes.
    */

    const char* Item1[4]
        = { "Attack %", "Health %", "Defense %", "Elemental Damage %" };

    const char* Item2[4]
        = { "Mana Regeneration", "Cooldown Reduction", "Healing Efficacy", "Elemental Resonance" };

    const char* Item3[4]
        = { "Raw Attack", "Raw Health", "Raw Defense", "Raw Elemental Damage" };

    const char* Item4[4]
        = { "Elemental Resonance", "Critical Chance", "Critical Multiplier", "Mana Regeneration" };

    const char* Item5[4]
        = { "Elemental Damage %", "Critial Chance", "Critical Multiplier", "Cooldown Reduction" };

    const char* SubAttributeList[10]
        = { "Raw Attack", "Raw Health", "Raw Defense", "Raw Elemental Damage", "Elemental Damage %",
            "Elemental Resonance", "Mana Regeneration", "Cooldown Reduction", "Critical Chance", "Critical Multiplier" };

    const char* RarityChart[6]
        = { "Common", "Uncommon", "Rare", "Unique", "Legendary", "Mythical" };

    const int InventoryLimit = 256;
    int InventorySize = 0;

    int ItemCreate(int x, int y) {

        int randNum = rand() % 4 + 1;

        if (InventorySize < InventoryLimit) {
            switch (x) {
            case 1:
                cout << "You have generated an Item1! Here are the resulting attributes:" << endl;
                cout << "Main Attribute: " << Item1[randNum] << endl;
                cout << "Sub-Atrributes: " << endl;
                break;

            case 2:
                cout << "You have generated an Item2! Here are the resulting attributes:" << endl;
                cout << "Main Attribute: " << Item2[randNum] << endl;
                cout << "Sub-Atrributes: " << endl;
                break;

            case 3:
                cout << "You have generated an Item3! Here are the resulting attributes:" << endl;
                cout << "Main Attribute: " << Item3[randNum] << endl;
                cout << "Sub-Atrributes: " << endl;
                break;

            case 4:
                cout << "You have generated an Item4! Here are the resulting attributes:" << endl;
                cout << "Main Attribute: " << Item4[randNum] << endl;
                cout << "Sub-Atrributes: " << endl;
                break;

            case 5:
                cout << "You have generated an Item5! Here are the resulting attributes:" << endl;
                cout << "Main Attribute: " << Item5[randNum] << endl;
                cout << "Sub-Atrributes: " << endl;
                break;

            default:
                cout << "They item you tried to generate doesn't seem to exist.\nPlease enter a number between 1 and 5 to generate a random item." << endl;

            }
        }
        else {
            cout << "Sorry, your inventory is too full\nPlease clear some space before attempting to create another item." << endl;
        }
    }
};

Source.cpp源.cpp

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

int main() {
    int x, y;

    cout << "Welcome to the random item generator!" <<
        "\nPlease enter a number between 1 and 5, " <<
        "\nfollowed by a number between 1 and 10 to select its rarity, " <<
        "\nto receive your own randomly generated item.\n" << endl;

    cin >> x;
    cin >> y;

    ItemGeneration item;
    item.ItemCreate(x, y);
    return;
}

** Update with errors ** ** 错误更新 **

I should have been more concise.我应该更简洁。 However, I do not believe there to be an actual buffer error, a false negative.但是,我不认为存在实际的缓冲区错误,即假阴性。 As for the error messages.至于错误信息。

My main function is returning a c2561 error, but I believe that to be a side effect of the item generation, not functioning.我的主要功能是返回一个 c2561 错误,但我认为这是项目生成的副作用,无法正常工作。 MEaning it simply is returning the value as the function isn't operating.意味着它只是在函数未运行时返回值。 Here is my terminal readout when attempting to build the solution:这是我尝试构建解决方案时的终端读数:

Build started...
1>------ Build started: Project: RandomItemGenerator, Configuration: Debug x64 ------
1>ItemGeneration.cpp
1>Source.cpp
1>C:\Users\Alex\source\repos\RandomItemGenerator\RandomItemGenerator\Source.cpp(18,2): error C2561: 'main': function must return a value
1>C:\Users\Alex\source\repos\RandomItemGenerator\RandomItemGenerator\Source.cpp(5): message : see declaration of 'main'
1>Generating Code...
1>Done building project "RandomItemGenerator.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

The quick solution error description:快速解决错误说明:

(const char [17]) "Main Attribute: "
C6385: Reding Invalid Data from 'this->item5'.
int main() {
   // stuff
   return;  // <- always an error
}

Here's your problem.这是你的问题。 You promised that main would return an int, and then you reneged on that promise with just a plain return .你承诺main会返回一个 int ,然后你只用一个简单的return就违背了这个承诺。 main is a little special in that it should return an int, so, failing all else, make it return 0. main有点特别,因为它应该返回一个 int,所以,如果其他一切都失败,让它返回 0。

int main() {
   // stuff
   return 0; 
}

You did it again in ItemGeneration::ItemCreate你在ItemGeneration::ItemCreate中又做了一次

int ItemCreate(int x, int y) 
{
   // stuff
   return;    // nope
}

But in this case, there isn't really anything to return.但在这种情况下,实际上没有任何东西可以返回。 Your main routine ignores the return value anyway.无论如何,您的main例程都会忽略返回值。 So you should declare it to return void instead:因此,您应该将其声明为返回void

void ItemCreate(int x, int y) 
{
   // stuff
   return;    // OK now (not actually needed, however)
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM