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

时间:2011-06-13 05:10:51

标签: c++ pointers

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

以下是我的代码的一部分......

int* input;
char* userInput[1];
int* output;

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

它在最后一行打破。

7 个答案:

答案 0 :(得分:10)

为指针分配的内存,但指针本身仍未指向任何位置。使用new为要指向的指针分配内存,并在以后使用delete释放它。

答案 1 :(得分:2)

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

在解除引用之前

执行input = new int

答案 2 :(得分:2)

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

使用Java背景,您会发现它与NullReferenceException类似。

答案 3 :(得分:1)

没有。 int* input;仅声明指向int的指针,而不是保存整数所需的实际空间。

答案 4 :(得分:1)

没有。永远不会为指针分配内存空间。你必须自己分配。 (如果您使用的是C ++,那么您应该几乎总是使用智能指针代替原始指针)

答案 5 :(得分:1)

“当我声明指针时,不应该分配内存空间” - 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
希望这会对你有所帮助!

答案 6 :(得分:0)

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

int   input; 
int   output;  
std::string   userInput; 

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