c - 数组中的 append 值不是 c 中所需的值

标签 c arrays struct append

此函数将所需的值 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;
}

最佳答案

假设你有:-

(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];

关于c - 数组中的 append 值不是 c 中所需的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27180502/

相关文章:

在给定预序序列的情况下,用 C 语言构造一棵只有叶子的树

c - 在c中的字符串左侧添加空格

c - 从文件中读取最后 20 个字节

javascript - 如何使用javascript多次访问一个页面?

json.Marshal 对两个对象的行为不同 (Go/Golang)

C:使用数组,总是给我错误的输出

javascript - 如何合并嵌套对象数组的内容?

Android从webservice获取图片,如何?

c - "expected'; ',' 或 'or' ) 'before' * 'token"使用结构时出错

c - 指向结构体指针的指针