CPP访问冲突错误

CPP access violation Error

本文关键字:错误 访问冲突 CPP      更新时间:2023-10-16

我一直收到这个错误:0x40496a处的访问冲突:写入地址0x0。我使用Borland C++。

这是我的源代码。

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
int main()
{
    char *nm;
    cout<<"n Enter a name: ";
    gets(nm);
    cout<<"n Name: "<<nm;
    getch();
    return 0;
}

即使我将char*nm设置为NULL或使用cin>>作为输入,我也会得到同样的错误。请帮忙,谢谢。

当您声明nm时,您没有初始化它,这意味着nm的值是不确定的,它并没有真正指向任何地方(实际上它指向一个看似随机的位置)。你需要让它指向一个足够大的东西来容纳你输入的字符串。

使用未初始化的变量和NULL指针会导致未定义的行为,其最常见的结果是崩溃。

要解决此问题,请将其指向一个已初始化的数组:

char str[20];
char* nm = str;

或者为字符串动态分配内存:

char* nm = new char[20];

或者更好的是,不要将字符指针用作字符串,并且特别是gets函数(它很危险,甚至已从C标准中删除),使用C++std::string类和std::getline函数来获取行:

std::string nm;
std::getline(std::cin, nm);

或者,如果你只想得到一个空格分隔的单词,可以使用普通的输入运算符:

std::string nm;
std::cin >> nm;