【发布时间】:2015-01-21 02:55:14
【问题描述】:
我有一个为某个数组创建副本的函数。我的代码结构是:
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 的断言失败。我唯一拥有 ia 的地方是 memcpy。但我什至没有在我的函数中做断言。有人知道为什么它给了我一个断言错误吗?
【问题讨论】:
-
原因可能是您从未将
len变量初始化为一个值。很可能你真的想做unsigned int len = ia->len;之类的事情 -
len 未初始化。还要尽量保持你的代码连贯而不是混合。
NULL、0之类的,如果你真的是同样的意思。另一件事是您断言newia是否已正确分配,然后使用 if 语句检查它。我真的不知道这段代码应该做什么,因为你根据长度复制随机数量的数据...... -
unsigned int len = ia->len;和 intXXX_t 是系统保留名称。