我目前正在编写一个基于终端的十六进制编辑器。我有一些关于内存分配的问题。
为了跟踪用户所做的更改,我将它们写入一个数组数组,如下所示,[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/