写入位置0x0000000a时发生访问冲突

Access violation writing locations 0x0000000a

本文关键字:访问冲突 0x0000000a 位置      更新时间:2023-10-16

我制作了一个简单的程序,在这个程序中,我用用户输入的参数执行一个程序,但每当我运行它时,它都会给我错误

        "Unhandled exception at 0x00f138b7 in SZP_Client.exe: 0xC0000005: Access violation writing location 0x0000000a."

我的代码是

        char* command_text;
        cout << "Enter SERVER IP Address without Port ";
        cin >> command_text;
        char* command_str = strdup("PServLib.exe "127.0.0.1" "30760" ");
        string command_string_out_final= command_str;
        command_string_out_final.append(command_text);
        command_string_out_final = command_string_out_final + " "3627"";
        system(command_string_out_final.c_str());

为什么我的代码会引发访问违规,以及如何修复它?

罪魁祸首是cin >> command_text。当写入char*时,它假设这是一个足够大的字符数组,可以容纳正在写入的值。相反,它是一个未初始化的char*,所以您正在向任意内存中写入。

最简单的解决方法是将command_text更改为std::string

char* command_text;
cout << "Enter SERVER IP Address without Port ";
cin >> command_text;

command_text是一个未序列化的指针。为什么在代码中混合使用char*std::string?只要在任何地方使用std::string即可。

char* command_text;
cin >> command_text;

这是在读取一个没有分配空间的C风格字符串

使用C++字符串会更好

std::string command_text;
cin >> command_text;

其根据需要分配空间来存储输入。

您可能想要

        string command_text;

而不是CCD_ 10。cin将尝试将其输出放入string,而不是char*