写入位置0x0..的C++访问冲突正在设置int*

C++ Access violation writing location 0x0... setting int *

本文关键字:设置 int 访问冲突 C++ 位置 0x0      更新时间:2023-10-16

我已经在这里和其他地方查看了各种问题,但我仍然无法解释我遇到的访问违规错误。"写入位置0x00000000的访问冲突"对应于NULL指针,对吗?我已经声明了一个int指针,稍后我会尝试在该位置设置一个值。当我声明指针时,不应该分配内存空间吗?如果这是中午,请原谅我,但我更像是一个Java/AS3的家伙。

这是我代码的一部分。。。

int* input;
char* userInput[1];
int* output;
int _tmain(int argc, _TCHAR* argv[])
{
    while(1)
    {
        srand(time(0));
        *input = (int)(rand() % 10);

它在最后一行断了。

为指针分配内存,但指针本身仍然不指向任何位置。使用new为要指向的指针分配内存,稍后使用delete释放内存。

您声明了一个指针,但从未为其分配内存。全局指针变量初始化为零,所以幸运的是,在堆栈上,您会得到未定义的行为。

在取消引用之前执行input = new int

指针本身的内存是保留的(足够容纳一个地址),但没有任何内存供指针指向。

根据您的Java背景,您会认识到这类似于NullReferenceException

否。int* input;只声明一个指向int的指针,而不是保存整数所需的实际空间。

否。内存空间从不分配给指针。你必须自己分配。(如果你在C++中,你几乎应该总是使用智能指针而不是原始指针)

"当我声明指针时,不应该分配内存空间吗"-HEAP上的内存只有在使用new关键字时才会分配。例如,

int *ptr   //creates a pointer variable on the stack
ptr = new int(5); //allocates space in heap and stores 5 in that space

希望这对你有帮助!

您真的需要指针吗?如果你只需要一些int和一个字符串,你可以直接分配它们:

int   input; 
int   output;  
std::string   userInput; 
int _tmain(int argc, _TCHAR* argv[])
{
    while(1)
   {
         srand(time(0));
         input = rand() % 10;