如何追加数组?

时间:2018-04-09 21:02:03

标签: c

我正在寻找是否有可能在C中放大数组大小而不会丢失旧值,这就是我想在Python中追加函数。

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);

2 个答案:

答案 0 :(得分:4)

您实际上正在减少分配的空间,而不是增加它。 mallocrealloc获取要分配/调整大小的字节的大小。和 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_arr整数的空间。

请注意,使用temp变量存储结果是一种很好的做法 realloc。当realloc失败时,原始内存被释放,所以如果你 不要使用临时变量,那么你将丢失指向原始的指针 存储器中。

另外,don't cast malloc and realloc

答案 1 :(得分:3)

只需比较代码的两行:

int *arr = (int *)malloc(sizeof(int)*size_arr);
arr = (int *)realloc(arr, size_arr);

你是否看到两个电话的最后一个参数的区别?因为重新分配时会将数组缩小为两个字节,因此数组内容会丢失,行为会略微未定义。

realloc一个合适的尺寸,您就会看到它保留原始数据。