【问题标题】:function access violation reading location函数访问冲突读取位置
【发布时间】:2015-01-27 23:32:57
【问题描述】:

我有一个函数,它只在 return 语句在 else 内时返回访问冲突读取位置错误,但当它在 else 之外时不会出现错误,但由于代码 I 有时我会得到相同的返回值不应该。这是代码:

void askUser(){
    std::cout << "Level: ";
    std::cin >> level;

    for (int x = 0; x < 3; x++){
        word = getWord(level);
        std::cout << word << std::endl;
    }
}

std::string getWord(int level){
    int randomNumber = rand() % 3;
    if (usedWords[0].find(line[level - 1][randomNumber]) != usedWords[0].end()){
        getWord(level);
    }
    else{
        usedWords[0].insert(line[level - 1][randomNumber]);
        return line[level - 1][randomNumber];  //returns the access violation error
    }
    //if the return was here no access violation but can return previous return values which shouldn't happen
}

我不确定到底是什么导致了错误,但我认为这与 return 语句有关。

【问题讨论】:

  • 这并不是真正的递归——它再次使用相同的参数调用自身;改变的只是随机数。 if 也可以是 while 和新的 rand()
  • 抱歉打错了,我试试看,谢谢@OllieFord
  • 能否请您提及您使用的变量类型,如 line、usedWords 等?

标签: c++ access-violation


【解决方案1】:

问题是当if 语句中的条件为真时,您没有返回任何内容。该函数说您应该返回一个字符串,但您只是到了函数的末尾。未定义的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2016-05-28
    • 2017-01-09
    • 2014-11-09
    相关资源
    最近更新 更多