C++ C/C++;Visual studio中的基本结构不工作
我有两个简单的结构,一个是第二个结构的数组 当访问第二个程序时,我的程序在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
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]
访问任何元素)