c - 如果我们使用 malloc 分配结构,则在内存上分配结构字段的位置



这里我们有一个结构体,然后,我们使用malloc分配它的实例:

typedef struct _MyStruct {
    struct *nextStruct;
    char array[4];
} MyStruct
/* Allocates space on heap for the struct */
_MyStruct *m = malloc(sizeof(MyStruct));
printf("%zu bytesn", sizeof(MyStruct)); /* Outputs: 8 bytes */
int r;
/* We intentionally overflow the buffer inside of the struct */
r = (int)gets(m->array); /* Input */
    if (r == 0)
         return;

根据我目前的理解。这些断言是否正确?

  1. 当我们填充字符串"abcde"(5 个字节(时,我们会溢出结构内部的 char 数组,该数组驻留在堆栈上。

  2. 如果我们插入字符串"abcdefghi"(9 个字节(,我们就会溢出结构本身,我假设它在堆上。但我们也溢出了堆栈上的 char 数组。

编辑:为了更准确,这个问题基于C99标准,由i686 OS实现。

当我们填充字符串"abcde"(5 个字节(时,我们会溢出结构内部的 char 数组,该数组驻留在堆栈上。

否,结构及其关联元素是通过 malloc 动态创建的。 所以整个结构,包括 char 数组都位于堆上。

你正在覆盖堆上结构的地址,而不是堆本身的结构,假设你的意思是指向下一个结构的指针

相关内容

  • 没有找到相关文章

最新更新