【问题标题】:C++ Allocation of array of structC++ 结构数组的分配
【发布时间】:2012-06-08 00:14:19
【问题描述】:

我必须在 C++ 中分配一个结构数组,任何结构都包含两个 int 向量。这是我的结构:

typedef struct _Sample{
vector<int> contourX;
vector<int> contourY;
}Sample;

为了分配这个数组,我编写了以下代码:

data = (struct _Sample*) malloc(sizeof(struct _Sample) * nsamples);

当我尝试将 Sample 元素分配给 data[0] 时,运行时出现错误。问题出在哪里?

【问题讨论】:

  • 矢量元素的大小仍为 0。您如何访问它们?
  • Sample * data = (Sample*) malloc(sizeof(Sample) * nsamples);//你使用的是typedef,所以使用"Sample"
  • 为什么在 C++ 中使用过时的 typedef struct
  • typedef 的目的是让你不必做他所做的“struct _sample”......只是简单
  • @jdl,也许在 C 中;在 C++ 中,struct Sample { /* ... */ }; 之后,Sample 是完整的类型名称;不需要struct...

标签: c++ arrays struct allocation


【解决方案1】:

如果您使用 C++ 编程,您可以使用“new”...例如: _Sample* 数据 = 新 _Sample[大小];

【讨论】:

    【解决方案2】:

    您正在尝试创建一个数组,为此,您应该使用new[] 来分配内存(并使用delete [] 来释放它)。

    这样你的代码应该是:

    Sample* data = new Sample[nsamples];
    

    然后你可以像任何数组一样遍历数组的每个元素:

    for(int i = 0; i < nsamples; i++)
    {
        data[i].contourY // do something
        data[i].contourX // do something
    }
    

    【讨论】:

      【解决方案3】:

      您需要使用new - 需要执行向量的构造函数。

      【讨论】:

        【解决方案4】:

        经验法则:永远不要在 C++ 中使用malloc1它是一个 C 函数,因此不能执行所有 C++ 的操作,例如调用构造函数。

        如果必须动态分配内存,请改用new


        1。这是一条规则,有少数例外,但在大多数情况下,可以安全地视为一揽子规则。

        【讨论】:

        • Oli,如何扩展分配的内存区域?或者将mmap 连接到newnew [] 运营商?
        • @VladLazarenko:“经验法则”!=“一揽子规则”。
        • /me 将自己置于“持有”状态:) -1 不是我。一般来说,对于新手来说,这是一个很好的经验法则。
        猜你喜欢
        • 2014-08-22
        • 1970-01-01
        • 1970-01-01
        • 2011-05-24
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多