数组中的附加值在c中不是期望的值

时间:2014-11-28 00:47:17

标签: c arrays struct append

此函数将所需的值附加到数组的末尾。当我测试代码时,我使用了值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;
}

1 个答案:

答案 0 :(得分:2)

鉴于你有: -

(sizeof(int)*len+1)

然后这不在你的数组的末尾: -

ia->data[len+1]=val;

有两个原因: -

  • 你没有分配足够的内存,因为+ 1在乘法后发生。
  • 如果你分配1,那么你的第一个点是数据[0]而不是数据[1]。

所以你应该这样做: -

a->data = realloc(ia->data, (sizeof(int)*(len+1)));

ia->data[len]=val;
ia->len++;

,您的上一个项目是ia->data[ia->len-1];