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