每次调用printf后,结构指针的值都会发生变化。
我有以下结构体:
struct block_meta_data
{
size_t size;
struct block_meta_data * next;
int isFree;
};
typedef struct block_meta_data block_meta_data;
struct list
{
block_meta_data* base;
block_meta_data* end;
};
typedef struct list list;
我定义了一个列表类型的全局变量blocks_list:
list blocks_list = {NULL, NULL};
其主要功能如下所示:
int main(void)
{
char a[] = "hello";
printf("%s\n", a);
return 0;
}
现在,使用调试器,我在调用printf之前观察'blocks_list'变量的两个字段的值,它们的值都为NULL:
调用printf后,两个字段的值都更改为:
我尝试打印end和base的值(不使用编译器),但问题仍然存在:
一个三个三个一个
有人能解释一下为什么会这样吗?
1条答案
按热度按时间esyap4oy1#
有人能解释一下为什么会这样吗?
有几种可能的解释:
blocks_list
实际上没有被使用,并且没有为它分配任何存储(通常编译器也会将blocks_list
的位置设置为0
,这将阻止调试器显示它)。由于您似乎使用的是Linux,请注意,您可以使用GDB观察点 * 告诉 * 值被覆盖的位置: