【问题标题】:Why can't I set values of data for a pointer pointing to null为什么我不能为指向 null 的指针设置数据值
【发布时间】:2018-11-18 15:17:43
【问题描述】:
struct avail
{
    int value;
    uint64_t y[8][5];
    avail **masks;
};
avail *n = new avail;
n->masks = new avail*[48];

现在说我要设置n->masks[i]->y[1][3]=0x000000000000000F的一些数据

如果我这样做了,为什么我不能这样做

n->masks[i]=NULL;

我不想要像链表这样的层次结构。我收到一个错误nullptr。如果我什么都不做设置指针,我会得到Access Violation。如果我不想使用它的“链接”来创建任何树/层次结构,我应该将这个指针指向哪里。

这只有在我设置时才有效

n->masks[i]=n;

但我认为这会覆盖数据存储。我的实施有什么问题吗?如果我只想设置它的数据,我应该指向哪里?

【问题讨论】:

标签: c++ pointers data-structures null nullptr


【解决方案1】:

因为如果指针为空,那么你就指向了一个你不能写入的地址。你总是可以写你分配的地址,堆栈或堆。

分配你的面具,然后使用它:

n->masks[i] = new avail;

但不要忘记删除分配的对象。似乎masks 应该是std::vector<std::unique_ptr<avail>>

【讨论】:

  • for i
  • 您必须为掩码“数组”中的每个条目创建一个新的avail
  • 谢谢,我以为您必须移除第二个掩码并用您的掩码替换它。我两个都需要。你能解释一下为什么我需要做你提到的那条线。为什么我需要创建 3 个单独的“新”语句。顺便说一句,我的程序现在正在运行,但我有点困惑!
  • 你需要分配n,因为它是你需要的对象,你需要分配你的指针数组masks,然后你需要分配你的指针的对象(来自@987654327 @) 将指向。显然使用智能指针和容器,似乎你没有正确处理内存管理:/
  • 不,我试图让程序与我对战,它需要在尽可能短的时间内尽可能快地搜索所有可能的位置。我认为将与(1kb!的掩码)一起使用会将复杂性降低到0(1)。所以我需要所有的面具直到程序结束,从长远来看它更快。感谢您的快速回答!
猜你喜欢
  • 2010-10-16
  • 2012-01-10
  • 2017-01-05
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 2020-04-22
  • 2011-12-16
相关资源
最近更新 更多