c++ - 使用 new 创建一个结构数组

标签 c++ data-structures struct

我在这里遇到了一些困难的情况,我希望有人能帮助我。

我有以下内容,

struct CandyBar{ 
  std::string name; 
  double weight; 
  int calories; 
} ;

现在,创建一个包含许多 CandyBar 的结构数组非常简单,我已经这样做了;

int main(){
   CandyBar bars[] = {{"Mango tart", 2.3, 100}, {"Yo Yo", 3.2, 130}, {"Orange Ball", 1.7, 98}};
  return 0;
}

但是,现在我想使用 new 创建相同的结构。当我想到它时它非常简单,但是它崩溃并且不起作用。

CandyBar *bars = new CandyBar;
  (*bars).name = "Mango tart";
   bars->weight =  2.3;
   bars->calories =  100;
   bars += 1;

  (*bars).name = "Yo Yo";
  bars->weight =  3.2;
  bars->calories =  130;

  bars += 1;
  (*bars).name =  "Orange Ball";
  bars->weight =  1.7;
  bars->calories =  98; 

但是,这是行不通的。因为我认为第一个指针是指向第一个结构的内存位置,然后我创建结构,然后使用 bar += 1 增加地址,并继续创建指针,但我错过了一些非常严重的东西。

非常感谢您的帮助。

最佳答案

在您的第二个示例中,您只分配了一个 CandyBar 结构,但您将其视为一个数组。这不会有好结果,并且会导致缓冲区溢出。

为了分配一个 CandyBars 数组,您需要告诉 new 您想要一个数组,如下所示:

CandyBar* bars = new CandyBar[3];

确保在删除 CandyBars 数组时,您使用的是这样的数组删除:

delete[] bars;

综上所述,在 C++ 生产代码中,您通常会使用 std::vector 或 std::arrray 来处理这种情况,因为您不必像在这种特定情况下那样处理那么多的资源管理案例。

如果您必须在堆上动态分配一个数组并仍然使用 RAII,我还会查看 boost::shared_arrayboost::scoped_array。

关于c++ - 使用 new 创建一个结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14114686/

相关文章:

c++ - 使用统一 native C++ 插件时出现 DllNotFoundException

c++ - 返回字符串的散点回文数

c - 如何在 C 中通过引用将结构数组传递给函数?

可以使用 C 中的宏从各种结构构建预编译时间的任意字节数组吗?

c++ - 计算C++中相同运行进程的总数

c++ - 将 `basename` 与 __FILE__ 一起使用是否安全?

c++ - 如何正确等待线程中的信号

javascript - 问卷的正确数据结构是什么

Java ArrayList 实现

c++ - 双向链表的内存泄漏