c++ - C++ 结构中的动态内存分配

标签 c++ memory dynamic struct allocation

我不明白在 C++ 中动态分配结构成员所需的语法。基本上,我需要使用临时数组和 strlen 将 char 数组成员填充到精确大小。这是我的结构:

struct card
   {
   char *rank;
   char *suit;
   char color;
   bool dealt;
   char *location;
   };

这是使用该结构的函数:

bool importCard(card *deckPtr, char *deckName);

我创建了一个包含 52 张卡片的数组并为其分配了一个指针,并将其作为第一个参数传递给该函数。 (deckPtr) 这是函数中的一个循环,应该将卡信息读入结构数据成员。

for(index=0;index<52;index++,deckPtr++)
  {

  fin >> *temp;
  charCount=stringLength(temp);
  deckPtr.*rank = new char[charCount+1];
  stringCopy(*temp, deckPtr.*rank);

  fin >> *temp;
  charCount=stringLength(temp);
  deckPtr.*suit = new char[charCount+1];
  stringCopy(*temp, deckPtr.*suit);

  if(deckPtr.*suit==('d')||deckPtr.*suit==('h'))
     {
     (*deckPtr).color='r';
     }
  else
     {
     (*deckPtr).color='b';
     }

  (*deckPtr).dealt=false;

  deckPtr.*location = new char[11];
  stringCopy(unshPtr, deckPtr.*location);

  }

我收到三个编译错误:“rank”、“suit”和“location”“未在此范围内声明”。我究竟做错了什么?谢谢!

最佳答案

语法是deckPtr->rank, deckPtr->suit, deckPtr->location = new char[...]; .

但是您的编码风格更像 C 而不是 C++。相反,如果您使用现代 C++,以及方便的 RAII 类,如 std::string,您的代码将变得简化:只需使用 std::string 而不是原始 char* 指针,您不必关注内存分配和内存释放:它全部由 std::自动管理字符串和析构函数。

#include <string>

struct card
{
   std::string rank;
   std::string suit;
   char color;
   bool dealt;
   std::string location;
};

而不是您自定义的 stringCopy() 函数,您可以只使用“自然” operator= 重载 std::string (即 destString = sourceString;).

要构建一个包含 52 张卡片的数组,只需使用 std::vector:

#include <vector>

std::vector<card> cards(52);

同样,内存分配由 std::vector 自动管理(并且,与原始 C 数组不同,您可以查询 vector 以获取其自身的元素计数,使用其size() 方法)。

关于c++ - C++ 结构中的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15120852/

相关文章:

memory - 如何设置 Apache Spark Executor 内存

php - 更新网页的特定区域而不重新加载整个页面

java - 以编程方式动态导入

c++ - 为什么 OnDraw 不够用(在 MFC 中,Scribble 教程)

c++ - 将 PNG 纹理导入内存而不是帧缓冲区 - 使用 C++ 和 OpenGL

c++ - boost::lexical_cast 输出错误

ios - 这些闭包中的保留周期有什么区别?标准闭包与对象初始化闭包

c++ - C++中的动态二维数组和内存泄漏

c# - 为什么包含枚举的 C++ 方法会在 SWIG/C# 中导致 AccessViolationExceptions?

c++ - 制作替换系统库中的函数调用的 DLL 的问题