我有一個函數爲某個數組創建一個副本。我的代碼的結構是:斷言在memcpy之後失敗c
typedef struct {
int* data;
unsigned int len;
} intarr_t;
我寫的功能是:
intarr_t* intarr_copy(const intarr_t* ia)
{
unsigned int len;
intarr_t* newia = malloc(sizeof(intarr_t));
assert (newia);
newia->data = malloc(sizeof(int)*len);
newia->len = len;
if (newia == 0)
{
return NULL;
}
else
{
memcpy (newia->data, ia->data, len*sizeof(int));
}
return 0;
}
當我測試的功能,它停止了我的功能,說我對IA斷言失敗。我唯一的地方是使用memcpy。但我甚至沒有在我的功能上做出斷言。有人知道爲什麼它給了我一個斷言錯誤?
原因可能是你永遠不會將你的'len'變量初始化爲一個值。很可能你真的想要做一些像'unsigned int len = ia-> len;' – 2014-11-23 08:54:47
len的未初始化。也儘量保持你的代碼的連貫性,而不是混合。 'NULL','0'等等,如果你真的是指同一件事。另一件事是,如果'newia'被正確地分配,並且隨後用if語句檢查它,則斷言。我真的不知道這個代碼甚至應該做什麼,因爲你根據len值複製隨機數據量... – 2014-11-23 08:55:55
'unsigned int len = ia-> len;'和intXXX_t是系統保留名稱。 – BLUEPIXY 2014-11-23 08:57:57