C++ C/C++;Visual studio中的基本结构不工作

C++ C/C++;Visual studio中的基本结构不工作,c++,c,visual-studio,struct,C++,C,Visual Studio,Struct,我有两个简单的结构,一个是第二个结构的数组 当访问第二个程序时,我的程序在visual studio中崩溃,但在代码块中不会崩溃 因此,一条线不工作,另一条线不工作 有人能解释一下原因吗 struct buffer { uint64_t size; void* data; }; struct list_of_buffers { uint64_t number_of_buffers; bool* active_buffers; struct bu

我有两个简单的结构,一个是第二个结构的数组

当访问第二个程序时,我的程序在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;
   }

有人能解释一下吗?

你要的是
calloc
0个元素的缓冲区:

 buffer_list.array_of_buffers = (struct buffer*)calloc(0, sizeof(struct buffer) * size);
返回的内容由实现定义:

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

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

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

请显示一个,包括为
缓冲区列表分配内存的位置和方式。缓冲区的数组如何分配?那么calloc做什么呢?别担心,我误读了代码。虽然您仍然没有显示您提供的输入和id,但实际上我忘记了更改,
calloc(0,
意味着您为0个元素分配空间,这仍然是0(因此,您不允许通过
buffer\u list.array\u of\u buffers[x]
访问任何元素)