gpt4 book ai didi

c - 正在分配的结构内的数组

转载 作者:太空狗 更新时间:2023-10-29 16:09:04 25 4
gpt4 key购买 nike

我有以下代码:

#define MAX_NUMBER_OF_FRAMES 10

typedef struct my_frame_header {
unsigned int ul_Src;
unsigned int ul_Dest;
} MY_FRAME_HEADER;

typedef struct my_frame {
MY_FRAME_HEADER x_FrameHeader;
unsigned char uc_Frame[3000];
} MY_FRAME;

int main(int argc, char *argv[])
{
MY_FRAME *px_MyFrames;
px_MyFrames = (MY_FRAME *)malloc(sizeof(MY_FRAME) * MAX_NUMBER_OF_FRAMES);

// Use the x_MyFrames variable like an array
px_MyFrames[0].uc_Frame[0] = 10;

//free px_MyFrames
free(px_MyFrames);

return 1;
}

是否会成功释放所有内存?或者我是否需要在 MY_FRAME 的 Init 函数中将 uc_Frame 设为指针和 malloc 内存?然后在析构函数中释放 px_MyFrames 的每个 uc_Frame 的内存,然后释放 px_MyFrames? (抱歉,如果有任何编译器错误,我只是即时写给你基本的想法)。如果我放在这里的方式不正确并且存在内存问题,您能解释一下这些问题可能是什么吗?

最佳答案

因为 uc_Frame 是一个数组而不是指针,所以这非常有效。因为它是一个数组,数据将直接存储在结构中,而结构的大小约为 3008 字节。因此,无需为 uc_Frame 分配任何数据,因为同样它是一个数组而不仅仅是一个指针

会不会是这样的:

typedef struct my_frame {
MY_FRAME_HEADER x_FrameHeader;
unsigned int ul_FrameSize;
unsigned char *uc_Frame;
} MY_FRAME;

那么您将不得不为 uc_Frame 动态分配(当然还有释放)数据,因为它只是一个指针而不是数组。而且它不会存储在结构中,而结构的大小只有大约 16 或 24 字节。

关于c - 正在分配的结构内的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7916009/

25 4 0
文章推荐: javascript - 如何使用 Javascript 查找带命名空间的 HTML 元素
文章推荐: jquery - 将 gridview 呈现为
文章推荐: c - 基本 Malloc/免费
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com