此函数将所需的值附加到数组的末尾。当我测试代码时,我使用了值100776,但是当我打印出数组时,最后一个元素的值是135009,这与我想要的值完全不同。有人知道为什么会这样吗?
这是我的追加函数的结构:
typedef struct {
int* data;
unsigned int len;
} intarr_t;
这是我的实际附加功能:
intarr_result_t intarr_push( intarr_t* ia, int val )
{
unsigned int len = ia->len;
if (ia == NULL)
{
return INTARR_BADARRAY;
}
else
{
ia->data = realloc(ia->data, (sizeof(int)*len+1));
if (ia->data != 0)
{
ia->data[len+1]=val;
ia->len=len+1;
assert (ia->data);
return INTARR_OK;
}
else
{
return INTARR_BADALLOC;
}
}
return 0;
}
答案 0 :(得分:2)
鉴于你有: -
(sizeof(int)*len+1)
然后这不在你的数组的末尾: -
ia->data[len+1]=val;
有两个原因: -
所以你应该这样做: -
a->data = realloc(ia->data, (sizeof(int)*(len+1)));
和
ia->data[len]=val;
ia->len++;
,您的上一个项目是ia->data[ia->len-1];