C 如何附加数组?

C 如何附加数组?,c,C,我在寻找是否有可能在不丢失旧值的情况下在C中扩大数组大小,我猜这就是Python中的append函数 int size_arr = 1; int *arr = (int *)malloc(sizeof(int)*size_arr); // Let's give first element of arr to 1 *(arr+0) = 1; size_arr++; //Realloc, but I lost *(arr+0) = 1 arr = (int *)realloc(arr, size_a

我在寻找是否有可能在不丢失旧值的情况下在C中扩大数组大小,我猜这就是Python中的append函数

int size_arr = 1;
int *arr = (int *)malloc(sizeof(int)*size_arr);
// Let's give first element of arr to 1
*(arr+0) = 1;
size_arr++;
//Realloc, but I lost *(arr+0) = 1
arr = (int *)realloc(arr, size_arr);

只需比较两行代码:

int *arr = (int *)malloc(sizeof(int)*size_arr);
arr = (int *)realloc(arr, size_arr);
您看到两个调用的最后参数有什么不同吗?因为在重新分配时,将数组压缩为两个字节,数组内容将丢失,行为将变得稍微未定义


realloc
一个合适的大小,你会发现它保留了你的原始数据。

你实际上是在减少分配的空间,而不是增加它。两者都
malloc
realloc
获取要分配/调整大小的字节大小。和
int
的大小(以字节为单位)是
size*sizeof(int)

您的
realloc
调用应该如下所示:

int *tmp = realloc(arr, size_arr * sizeof *tmp);
if(tmp == NULL)
{
    fprintf(stderr, "Not enough memory\n");
    // arr is left intact, the memory is still allocated

    // Error handling, for example
    free(arr);
    return 0;
}

arr = tmp;
现在您有了
size\u arr
整数的空间

请注意,使用temp变量存储测试结果是一种很好的做法
realloc
。当
realloc
失败时,原始内存未被释放,因此如果 如果不使用临时变量,则会丢失指向原始变量的指针 记忆


另外,.

“略微未定义”。我可能会偷了它,将来用它做我自己的用途:)请随意。:)好吧,我不会的。从来没有计划过-|详细信息:代码未更改数组的大小。它正在更改分配的内存。在C语言中,一旦数组被定义为
inta[42]
,它的大小就不能改变
int*arr
是一个指针。不过,更改内存分配是这里要做的事情,而且非常常见。