【发布时间】:2020-08-25 15:10:21
【问题描述】:
我正在尝试将结构地址转换为字符串,但我尝试了两种编写代码的方法。 第一个导致了 valgrind 的错误,而第二个没有。这是我在重用 valgrind 时唯一改变的想法,但结果不同。 如果您能说出问题所在,我将不胜感激。
第一个:
typedef struct Unit_t *Unit;
//Creating a unit
char* unit_address = malloc(sizeof(unit) + 1);
int convert_result = sprintf(unit_address,"%p",(void*)unit);
//Checking the return result and freeing the allocated memory
第二个:
typedef struct Unit_t *Unit;
//Creating a unit
char unit_address[30];
int convert_result = sprintf(unit_address,"%p",(void*)unit);
//Checking the return result
我想分配内存,因为我不知道指针的长度是多少(至少不是在我正在做的硬件中)。
【问题讨论】:
-
什么是
unit(不是Unit)? -
我创建了一个 Unit_t 结构体,变量 unit 作为指向这个结构体的指针。
-
只为最长的字符串+1分配足够的空间。
-
您没有考虑 %p 生成的字节数,它不是 sizeof(unit) 而是 %p 在您的系统上生成的字节数 + 1。只需打印出来而是使用 printf 查看长度。或者 unit_address = malloc(30);
标签: c struct heap-memory valgrind