這是一個相當基本的問題,由於某種原因,目前適當的解決方案逃脫了我。我處理的第三方SDK其聲明如下結構:如何在不導致內存損壞的情況下將數據存儲在可變長度數組中?
struct VstEvents
{
VstInt32 numEvents; ///< number of Events in array
VstIntPtr reserved; ///< zero (Reserved for future use)
VstEvent* events[2]; ///< event pointer array, variable size
};
即使這是一個「可變大小」陣列,它的靜態聲明。很顯然,如果我創建一個VstEvents對象,將numEvents設置爲某個值,然後開始將它們添加到數組中,這會導致內存損壞。
那麼我該如何妥善處理這樣的結構呢?我應該分配我自己的VstEvent *數組,然後將事件[0]指向它嗎?
在C中,不應該從malloc()強制返回值。這樣做可以隱藏錯誤。 – unwind 2008-12-11 12:19:57
這在C89中才是真實的。在C99中,你不能使用隱式函數聲明,所以不管你是否投射都沒有區別。 Casting使得代碼可以在C++下編譯。 – 2008-12-13 06:48:22