【问题标题】:C/ C++ basic struct not working Visual studioC/C++ 基本结构不起作用 Visual Studio
【发布时间】:2020-08-05 21:27:37
【问题描述】:

我有 2 个简单的结构,一个有第二个的数组。

访问第二个时,我的程序在 Visual Studio 中崩溃,但在代码块中没有。

所以一条线不工作,另一条线。

谁能解释一下原因?

    struct buffer {
    uint64_t size;
    void* data;

};

struct list_of_buffers {
    uint64_t number_of_buffers;
    bool* active_buffers;
    struct buffer* array_of_buffers;
}buffer_list;




void alloc_fun(int size){
   buffer_list.array_of_buffers = (struct buffer*)calloc(0, sizeof(struct buffer) * size);

   //this one makes my program crash
   buffer_list.array_of_buffers[0].data = NULL;    

   //this one doesnt
   struct buffer tmp = buffer_list.array_of_buffers[0];
   tmp.data = NULL;
   }

谁能解释一下?

【问题讨论】:

  • 请显示minimal reproducible example,包括您为buffer_list.array_of_buffers分配内存的位置和方式
  • 怎么回事?那么 calloc 是做什么的呢?
  • 没关系,我看错了代码。尽管您仍然没有显示您提供了什么输入以及id 是什么
  • 操作我忘了改变那个 id
  • 实际上,calloc(0, 的意思是你为 0 个元素分配空间——仍然是 0(因此你不能通过buffer_list.array_of_buffers[x] 访问任何元素)

标签: c++ c visual-studio struct


【解决方案1】:

您正在向calloc 请求包含 0 个元素的缓冲区:

 buffer_list.array_of_buffers = (struct buffer*)calloc(0, sizeof(struct buffer) * size);

返回的是实现定义的as per the docs:

如果请求的空间大小为 0,则 行为是实现定义的:返回的值应为 空指针或唯一指针。

所以我的猜测是,Visual Studio 正在返回一个空指针(因此崩溃),而代码块则没有。我想这就是你想要的:

buffer_list.array_of_buffers = (struct buffer*)calloc(size, sizeof(struct buffer) );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2022-11-22
    • 2012-03-12
    相关资源
    最近更新 更多