………………………………哈哈 2024-02-29 17:47 采纳率: 86.7%
浏览 2
已结题

可以用malloc给vector分配空间吗,像下图一样?

img

我想创建N个vector,尝试用malloc来创建,但是无法运行,是不是不能这样做啊?

  • 写回答

5条回答 默认 最新

  • 关注

    ………………………………哈哈 下午好🌅🌅🌅
    本答案参考通义千问

    不建议直接使用mallocstd::vector分配内存。std::vector是一个动态数组,内部已经包含了内存管理的功能,包括动态扩容。

    在C++中,mallocfree通常用于处理C风格的数组或者自定义的数据结构,而不是标准库容器如std::vector。如果你需要创建多个std::vector,可以直接使用newstd::vector的构造函数。

    错误的做法:

    int N;
    // 假设你已经正确获取了N的值
    void* ptr = malloc(sizeof(std::vector<int>) * N); // 不推荐
    std::vector<int>* vectors = static_cast<std::vector<int>*>(ptr);
    

    正确的方法:

    1. 使用std::vector的构造函数:

      std::vector<int> vectors[N]; // 直接创建N个vector
      
    2. 或者,如果需要更大的灵活性,可以使用std::vector<std::vector<int>>

      std::vector<std::vector<int>> vectors(N); // 创建一个大小为N的vector,每个元素都是一个vector
      
    3. 如果真的需要手动管理内存(不推荐):

      std::vector<int>* vectors = new std::vector<int>[N];
      // 使用完毕后,记得释放内存
      for (int i = 0; i < N; ++i) {
          delete vectors[i];
      }
      delete[] vectors;
      

    但请尽量避免手动内存管理,除非你有特定的需求,因为这会引入更多的错误源。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 创建了问题 2月29日

悬赏问题

  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥500 服务器搭建cisco AnyConnect vpn
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询
  • ¥15 校内二手商品转让网站
  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?