Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在整数上声明两个指针(VS2012)_C++_Visual Studio 2012 - Fatal编程技术网

C++ 在整数上声明两个指针(VS2012)

C++ 在整数上声明两个指针(VS2012),c++,visual-studio-2012,C++,Visual Studio 2012,当我在整数上声明一个指针时,我的程序工作正常。 但若我声明了另一个指针,当我的程序执行时就会出错 为什么? 我使用VC++11 示例代码: int main() { int *p_first; int *p_seconds; *p_first = 5; *p_seconds = 6; return 0; } 您需要使指针指向可以写入的内存。您正在取消对未初始化指针的引用,这是一种未定义的行为。您的第一个版本可能“运行良好”,但它仍然是坏的,无法依靠工

当我在整数上声明一个指针时,我的程序工作正常。 但若我声明了另一个指针,当我的程序执行时就会出错

为什么?

我使用VC++11

示例代码:

int main()
{
    int *p_first;
    int *p_seconds;

    *p_first = 5;
    *p_seconds = 6;

    return 0;
}

您需要使指针指向可以写入的内存。您正在取消对未初始化指针的引用,这是一种未定义的行为。您的第一个版本可能“运行良好”,但它仍然是坏的,无法依靠工作

int* p_first; // uninitialized pointer.
int i = 41;   //
p_first = &i; // p_first now points to location of i
*p_first = 5; // OK

p_first = new int(); // p_first points to dynamically allocated int
*p_first = 5; // OK
delete p_first;

您需要使指针指向可以写入的内存。您正在取消对未初始化指针的引用,这是一种未定义的行为。您的第一个版本可能“运行良好”,但它仍然是坏的,无法依靠工作

int* p_first; // uninitialized pointer.
int i = 41;   //
p_first = &i; // p_first now points to location of i
*p_first = 5; // OK

p_first = new int(); // p_first points to dynamically allocated int
*p_first = 5; // OK
delete p_first;

您正在取消对未初始化指针的引用。这是。它第一次起作用是因为您很幸运。

您正在取消对未初始化指针的引用。这是。它第一次起作用是因为你很幸运。

因为它可以自由地做任何它想做的事-你的程序在取消引用未初始化的指针后有未定义的行为。

因为它可以自由地做任何它想做的事-你的程序在取消引用未初始化的指针后有未定义的行为。

请注意,你正在尝试取消引用导致未定义行为的未初始化指针。试着这样做:

int *p_first;
int x = 5;
p_first = &x;

请注意,您正试图取消引用导致未定义行为的未初始化指针。试着这样做:

int *p_first;
int x = 5;
p_first = &x;
当你写作时

int a = 3;
int* b = new int(3);
在内存中,您正在创建一个空间,将其称为
a
,并将
3
的值赋给它

当你写作时

int a = 3;
int* b = new int(3);
您正在创建一个空间
b
,该空间指向一个新创建的空间
3

当你写作时

int a = 3;
int* b = new int(3);
在内存中,您正在创建一个空间,将其称为
a
,并将
3
的值赋给它

当你写作时

int a = 3;
int* b = new int(3);
您正在创建一个空间
b
,该空间指向一个新创建的空间
3