我有一個返回一個指向結構如下功能:內存損壞
//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 /),這樣人們可以最好地理解你的問題。否則,我們無法確定您發佈的代碼段實際上是否包含問題。 –
您已刪除導致問題的確切行。無論「更多初始化」是什麼,它都在做非常非法的事情。請下次顯示所有相關代碼,包括錯誤的位。 –