【发布时间】:2012-12-06 18:03:17
【问题描述】:
使用我在这里学到的知识: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 应该检查它是否失败(是 NULL),但为了简单起见,这里省略了。
我仍在学习和尝试 C。感谢您的耐心等待。
【问题讨论】:
-
提示:作为形参,
int data[]与int *data完全相同