c 内存分配和数组的数组

标签 c memory-management malloc

我目前正在编写一个基于终端的十六进制编辑器。我有一些关于内存分配的问题。

为了跟踪用户所做的更改,我将它们写入一个数组数组,如下所示,[i][0] 是更改相对于文件开头的绝对偏移量,[i][1] 是更改本身:

unsigned long long writebuffer[10000][2];

但是我有两个问题。第一个数组 (writebuffer[i][0]) 需要为 sizeof unsigned long long,但第二个数组 ([i][1]) code>) 可以小到 sizeof unsigned char。可以做这样的事情吗?

我还可以动态分配 writebuffer 的第一个索引,这样我就不会像上面那样初始化它,而是更像:

unsigned long long **writebuffer;

然后使用malloc()realloc()更改第一个索引;而第二个索引将为 2,但大小为 unsigned char

最佳答案

为什么不使用结构体?

typedef struct {
    long long offset;
    int change; /* or unsigned short, or whatever you feel is right */
} t_change;

请注意,如果您选择使用 unsigned char 作为更改元素,编译器可能会将结构填充为不同的大小。它的填充内容取决于您的编译器、编译器设置和目标体系结构。

关于c 内存分配和数组的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21269859/

相关文章:

c - 处理用户在 C 中输入的字符串(错误处理)

c - C 代码段错误 : Return value

c++ - 无法理解 new 或 malloc 如何与 BYTE* 一起工作

c - 光线追踪半球

python - 为什么cython不编译逻辑或者到 `||`表达式?

c - fcntl Unix/Linux系统调用的全称是什么

objective-c - iOS自毁单例设计模式

c++ - boost 池库 : How to reuse created objects?

c++ - 使用 new 为 unsigned char 数组分配内存失败

char x[256] 与 char* = malloc(256*sizeof(char));