Visual Studio C++ 抛出异常:读取访问冲突。使用命令行参数进行调试时

问题描述 投票:0回答:2

在 Windows 10 上的 Visual Studio 2015 社区中使用 c++ 执行以下代码时,我收到抛出的错误异常,即使在对有相同问题的人进行了大量搜索后,我也不知道如何修复它。 Visual Studio 2015 Community 在这台运行 Windows 10 的计算机上正常工作了很长一段时间,但就在上周,它在调试任何 C++ 程序时给我带来了问题;特别是需要使用命令行参数的程序。这段代码演示了这个问题,如果有人能指出我如何解决它的正确方向,请告诉我。

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    cout << "program name : " << argv[0] << endl;
    cout << "first command argument : " << argv[1] << endl;

    cin.get();
    return 0;
}

我通过 entering it into the debugging properties window 添加命令行参数。如果我使用 ctrl + F5 运行该程序,它只会挂起并提示屏幕,表明该程序已停止工作。然后用 F5 运行程序后,我收到 this error message of

“抛出异常:读取访问冲突。

_首先是 nullptr。

如果有此异常的处理程序,则程序可以安全地继续。”

Visual Studio 指向引发异常的位置,即位于 c:\Program Files (x86)\Visual Studio 14\VC\include\ 文件夹内的文件 iosfwd。它具体指向的块位于 struct char_traits 内部,并且抛出指向返回行的异常的函数:

static size_t __CLRCALL_OR_CDECL length(const _Elem *_First)
    {   // find length of null-terminated string
    return (*_First == 0 ? 0
        : _CSTD strlen(_First));
    }

抛出错误时,控制台输出窗口挂在“第一个命令参数:”处,并且不显示“hi”。然而,它确实正确输出了 argv[0] 中指定的程序名称的文件位置。

如果我从命令提示符运行 Project1.exe,它将按预期运行,并将输出在行输入时添加的命令行参数。这告诉我 Visual Studio 有问题,而不是我的代码有问题。我将不胜感激任何关于如何解决这个问题的帮助,因为我更喜欢使用 Visual Studio 编写 C++。谢谢。

c++ visual-studio visual-studio-2015
2个回答
3
投票

我认为问题在于您正在为“发布”配置而不是“调试”配置设置命令行参数(请查看项目属性表单左上角的“配置”下拉列表)


0
投票

我在解析 xml 文件时遇到了类似的问题。现在,当我在发布模式下构建 dll 并在调试模式下进行测试时,这个问题得到了修复。感谢您的解决方案!

© www.soinside.com 2019 - 2024. All rights reserved.