【问题标题】:Troubles reading values of a struct attributes, which are of int* type读取 int* 类型的结构属性值时遇到问题
【发布时间】:2015-09-04 15:33:31
【问题描述】:

我正在练习 C++ 考试。即使在以前的考试副本中也有这样的例子(尽管我们正在纸上编写代码,至少现在是这样)。

这是其中一种结构(其中最简单的一种):

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;

控制台会崩溃或类似情况 - 它不会打印出月份值。

我也试过这个: cout _m)

但无济于事。

有人愿意帮忙吗?谢谢!

编辑:这是完整的代码:http://pastebin.com/DMWx2Hk5

编辑:事实证明,我的成员函数名称(创建)已损坏或类似的东西,仅此一项就是控制台崩溃的罪魁祸首。我改变了它,它开始工作了。

【问题讨论】:

  • 你完全没有必要在其中使用指针。
  • 我同意,但这就是学生们在纸上解决这个问题的方式。我还认为我应该删除这些指针属性并使它们成为纯整数但是..我想我应该首先找到一种方法让它按原样工作。
  • 如果您确实需要使用指针,初始化它们是必不可少的!否则你不知道它们是否指向分配的内存。
  • @crashmstr 我刚刚添加了pDate 的初始化(作为指针的那个)
  • 原来我的成员函数名 (Create) 已损坏或类似情况,仅此一项就是控制台崩溃的罪魁祸首。我改变了它,它开始工作了。

标签: c++ pointers struct


【解决方案1】:

您还没有为pDate 分配任何内存,您需要Date* pDate = new Date() - 指针_d _m 和_y 必须位于某个地方,在date 的情况下它们占用了@ 987654327@ 堆栈上的字节,但是对于您的指针,这 3 个点还没有存在于任何地方。所以你需要使用new在堆上为他们分配内存

【讨论】:

  • 实际上,我做到了,我只是没有在这里复制整个事情。请找出整个问题,我会尽快粘贴链接。
  • 请用一个简短的例子复制问题。由于这个原因,您在那里放置的代码不起作用
  • 上面的代码没有任何问题,除了最后一行你的意思是*pDate-&gt;_m而不是*date-&gt;_m
  • 我刚刚从 ˙main()˙ 中删除了所有内容,排除了其他东西干扰的可能性。它仍然不起作用。这真的让我很困惑
  • 原来我的成员函数名 (Create) 已损坏或类似情况,仅此一项就是控制台崩溃的罪魁祸首。我改变了它,它开始工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多