使用我在这里学到的知识:How to use realloc in a function in C,我编写了这个程序。
int data_length; // Keeps track of length of the dynamic array.
int n; // Keeps track of the number of elements in dynamic array.
void add(int x, int data[], int** test)
{
n++;
if (n > data_length)
{
data_length++;
*test = realloc(*test, data_length * sizeof (int));
}
data[n-1] = x;
}
int main(void)
{
int *data = malloc(2 * sizeof *data);
data_length = 2; // Set the initial values.
n = 0;
add(0,data,&data);
add(1,data,&data);
add(2,data,&data);
return 0;
}
该程序的目标是拥有一个动态数组data
,我可以不断向其中添加值。当我尝试向 中添加一个值时data
,如果它已满,则使用 realloc 增加数组的长度。
问题
该程序可以编译,运行时不会崩溃。但是,打印出data[0]
, data[1]
,data[2]
给出0,1,0
. 该号码2
未添加到数组中。
这是因为我使用错误realloc
吗?
附加信息
该程序稍后将与不同数量的“添加”和可能的“删除”功能一起使用。另外,我知道realloc
应该检查它是否失败 (is NULL
),但为了简单起见,这里省略了。
我仍在学习和尝试 C。感谢您的耐心等待。