在 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;
}
我通过 添加命令行参数。如果我使用 ctrl + F5 运行该程序,它只会挂起并提示屏幕,表明该程序已停止工作。然后用 F5 运行程序后,我收到 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++。谢谢。
我认为问题在于您正在为“发布”配置而不是“调试”配置设置命令行参数(请查看项目属性表单左上角的“配置”下拉列表)
我在解析 xml 文件时遇到了类似的问题。现在,当我在发布模式下构建 dll 并在调试模式下进行测试时,这个问题得到了修复。感谢您的解决方案!