【问题标题】:How to allocate memory for a struct variable whose members are of type string如何为其成员为字符串类型的结构变量分配内存
【发布时间】:2021-07-21 07:51:16
【问题描述】:

我的结构:

struct Company {
    string name;
    string profit_tax;
    string address;
};

我是用line分配的:

Company* a = (Company*)calloc(m, sizeof(Company));

long long m =pow(10,9)+9 但是指针 a 在分配后是一个空指针。我不知道为什么会这样?。请告诉我解决方案,谢谢!

【问题讨论】:

  • 在 99% 的情况下,解决方案是 auto a = new Company[m];
  • @StefanRiedel 我不同意。 std::vector<Company> a(m); 会更好。
  • std::string 的大小在 64 位架构上类似于 24 或 32 字节。您是否知道您正在分配 72 或 96 GB?你有多少内存?
  • 顺便说一句,您真的只想分配内存(存储),还是还希望构造此存储中的对象?
  • @DanielLangr,我知道,我的笔记本电脑有 8GB RAM。但这是我练习的任务。我认为这是错误的

标签: c++ memory-management


【解决方案1】:

您为计算机分配了太多内存(除非您有大量内存)。

请参阅this godbolt example,计算表明在他们的硬件上您将尝试分配 96GB 的内存!

如果这是一个练习,也许您在必须分配的大小的某个地方有错字? 如果没有,您可以尝试将std::string 替换为存储字符串的索引/指针。它应该可以节省一些内存,但您仍然会遇到问题。否则,您必须以不同的方式处理数据,即分块处理。

如果您使用 C++,为什么要使用 calloc?您可以简单地拥有std::vector<company> companies(m);,它将分配内存并构造您的所有对象。不易出错,更易读。

【讨论】:

  • 我正在学习哈希,因此该任务需要创建具有我提到的大小的哈希表。我用新的,然后我你 calloc 但都没有成功。
  • 如果你不能分配你要求的内存,一切都会失败。
  • 链接我的练习 [link]drive.google.com/drive/recent
  • 那个链接失效了。无论如何,使用您拥有的任何相关信息修改您的问题可能会更好。
猜你喜欢
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
相关资源
最近更新 更多