【发布时间】:2017-02-20 11:00:48
【问题描述】:
我想动态地将数字添加到 c 中的数组中。我的想法是分配一个大小为 + 1 的新数组,添加数字,释放根数组并将指针从临时更改为根数组。像这样:
void addNumber(int* a, int* size, int number)
{
*size = *size + 1;
int* temp = (int*)(calloc(*size, sizeof(int)));
int i, j = 0;
for(i = 0; i < *size-1; i++) {
if(a[i] < number) {
printf("add ai");
temp[j] = a[i];
j++;
} else {
printf("add number");
temp[j] = number;
}
}
if(j != *size) {
printf("add new number");
temp[j] = number;
}
free(a);
a = temp;
}
int main(int argc, char* argv[])
{
int n = 10;
int* a;
int size = 1;
a = (int*) (calloc(1, sizeof(int)));
a[0] = 1;
if(!contains(a, size, 2)) {
addNumber(a, &size, 2);
}
printArray(a,size);
return 0;
}
问题在于,在 addNumber 函数中,代码有效,并且 *a 具有新数组的正确值。但在主函数中,数组 *a 的值为 1,0。所以新插入的值 2 不会被添加。为什么?找不到原因。
【问题讨论】:
-
a = temp;毫无用处。a是一个局部变量。该分配不会影响a的main()。 -
realloc正是你想要的。 -
为什么不简单地用 realloc 扩大之前分配的内存呢?
-
@RPGillespie 如果这只是一个 C++ 问题...
-
@RPGillespie 如果 OP 不熟悉 C++(请参阅 stackoverflow.com/users/3172567/user3172567)或此 C 标记帖子的查看者不熟悉 C++,那么提供 C++ 解决方案的价值远低于专注于 C,也许甚至适得其反。