我有一个函数返回指向结构的指针,如下所示:
//header file
typedef struct {
unsigned char *buffer;
uint8_t len;
} T_ABC_PACKET
在主文件中,我创建了一个指向函数的指针并尝试打印它
T_ABC_PACKET *pct = NULL;
pct = function_that_return_the_packet;
printf("value of packet is %s \n", pct->buffer);
结果在打印功能中始终是一致的。我希望缓冲区有 8 个字节,最后一个字节总是损坏的内存。 值为 10000357`�2U
但是如果我在函数内打印缓冲区:
T_ABC_PACKET* function_that_return_the_packet {
T_ABC_PACKET *pct = NULL;
char string_temp[80];
//some more initialization...
pct->buffer = (unsigned char *)string_temp;
pct->len = 5;
printf("value of packet is %s \n", pct->buffer);
return pct;
}
函数中打印的值为10000357f。只有最后一个字符损坏。这总是提供一个一致的值,我没有多次运行程序,只有最后一个字符在函数的调用者中被破坏。我了解一种可能的情况是内存泄漏,但我尝试仔细检查并找不到任何泄漏。如何让 pct->buffer 正确拥有一切?