我有一个返回一个指向结构如下功能:内存损坏
//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->缓冲区以正确使用所有内容?
你是否正在为函数内的“pct”分配内存。 – Jay
只是提一个问题的提示:你通常应该提供一个[简短的,独立的,可编辑的例子](http:// sscce。org /),这样人们可以最好地理解你的问题。否则,我们无法确定您发布的代码段实际上是否包含问题。 –
您已删除导致问题的确切行。无论“更多初始化”是什么,它都在做非常非法的事情。请下次显示所有相关代码,包括错误的位。 –