我已经在这里和其他地方查看了各种问题,但我仍然无法解释我遇到的访问冲突错误。 “访问冲突写入位置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);
它在最后一行打破。
答案 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;