0

是否可以在结构定义之后使用指针以动态方式初始化?请在示例中。我试过了,但是当我尝试时出现异常cout << a->val << endl;

#include "stdafx.h"
#include <iostream>

using namespace std;


struct A{
public:
    int val = 0;
    A(){}

}*a,b,c;

int _tmain(int argc, _TCHAR* argv[]){

    cout << a->val << endl;//EXCEPTION
    cout << b.val << endl;
    int x;
    cin >> x;
    return 0;
}
4

2 回答 2

2

是的

struct A
{
  // ...

} *a { new A };

和合适的地方:

delete a;

通常不建议使用裸指针,您应该避免使用它们,如果您真的需要指针,请尝试使用智能指针,例如std::unique_ptrstd::shared_ptr

于 2013-11-12T23:27:49.833 回答
1

你的代码

struct A{
public:
    int val = 0;
    A(){}
}*a,b,c;

定义结构A声明三个全局变量a, b, c.

a是 'A*' 类型 - 即指向 type 的指针Ab并且c是type的实例A

简单的基本类型(例如整数、指针等)的全局变量,默认为 0。

结果等价于:

struct A{
public:
    int val = 0;
    A(){}
};
A* a = NULL;
A b;
A c;

当您的代码然后尝试使用a而不为其分配值时,它正在取消引用 NULL 指针并崩溃。

于 2013-11-13T01:54:01.663 回答