我正在編程tcp套接字,我正在使用struct sockaddr_in server_addr;
來設置端口等。在一些教程中,我已經讀過,我應該在使用之前將server_addr
的內存置零。我是不是該?我可能會記憶一些可能導致問題的數據嗎?它和linux和windows不同嗎?我應該將分配的內存歸零嗎?
感謝
我正在編程tcp套接字,我正在使用struct sockaddr_in server_addr;
來設置端口等。在一些教程中,我已經讀過,我應該在使用之前將server_addr
的內存置零。我是不是該?我可能會記憶一些可能導致問題的數據嗎?它和linux和windows不同嗎?我應該將分配的內存歸零嗎?
感謝
如果您沒有初始化保留內存區,它將包含之前存儲在那裏的任何值。所以它總是一個好主意,「零」,這意味着覆蓋那裏有什麼有價值的,在這種情況下,空字節\0
。
如果您將malloc
替換爲calloc
,此操作將自動完成。
不管你是否這樣做,它都不會影響你從套接字中讀取的值。
如果您在Windows或Linux/Unix上執行此操作,則無關緊要:這是所有環境的常見行爲。
這是一個好主意,這樣做,特別是在這種情況下。這些低級插座struct
有嵌套形式的小成員的無數。 memset
確保它們都沒有垃圾值。這非常簡單,相對高效,並且可以清除難以發現的錯誤。
這取決於。在你寫或不寫之前你想使用它嗎?如果你確信在覆蓋之前你不會從內存中讀取數據 - 你可以不使用內存(這會花費額外的程序工作時間,並且需要更多的代碼 - 代碼越少越好),否則你必須初始化記憶與零。