读取int*类型的结构属性值时出现问题 我正在练习C++考试。即使在以前的考试副本中,也有这样的例子,尽管我们在纸上写代码,至少现在是这样

读取int*类型的结构属性值时出现问题 我正在练习C++考试。即使在以前的考试副本中,也有这样的例子,尽管我们在纸上写代码,至少现在是这样,c++,pointers,struct,C++,Pointers,Struct,这是其中最简单的结构之一: struct Date{ int* _d, *_m, *_y; void Create(int d, int m, int y) { _d = new int; _m = new int; _y = new int; *_d = d; *_m = m; *_y = y; } } 现在,在main函数中,如果我这样做: Date date;

这是其中最简单的结构之一:

struct Date{
    int* _d, *_m, *_y;
    void Create(int d, int m, int y)
    {
        _d = new int;
        _m = new int;
        _y = new int;

        *_d = d;
        *_m = m;
        *_y = y;
    }
}
现在,在main函数中,如果我这样做:

Date date;
Date* pDate = new Date;

date.Create(1,1,2001);
pDate->Create(2,2,2002);

cout << "The month: " << *date._m << endl;
cout << "The month: " << *date->_m << endl;
控制台将崩溃或类似情况-它不会打印月值

我也试过:
如果没有为pDate分配任何内存,则需要Date*pDate=new Date-指针必须位于某个位置,如果Date占用堆栈上的3*sizeofint*字节,那么这3个点就不存在了。因此,您需要使用new在堆上为他们分配内存。在任何情况下,您都绝对不需要使用指针。我同意,但这就是学生在纸上遇到问题的原因。我还认为我应该删除这些指针属性,使它们成为纯整数,但是。。我想我应该首先找到一种方法让它按原样工作。如果你确实需要使用指针,初始化它们是很重要的!否则,您不知道它们是否指向已分配内存。@crashmstr我刚刚添加了pDate的初始化,该初始化被设置为pointer。结果发现,我的成员函数名Create被损坏或类似的东西,而这正是导致控制台崩溃的罪魁祸首。我改变了它,它开始工作。事实上,我做了,我只是没有在这里复制整个东西。请找出整个问题,我将很快粘贴链接。请使用一个简短的示例复制该问题。你放在那里的代码不起作用,因为这个原因上面的代码没有问题,除了最后一行你的意思是*pDate->\m not*date->\u mI刚刚删除了˙main˙中的所有内容,排除了其他东西干扰的可能性。它仍然不起作用。这真的让我很困惑,事实证明我的成员函数名Create被破坏了或者类似的东西,而这就是导致控制台崩溃的罪魁祸首。我改变了它,它开始工作了。