我正在寻找是否有可能在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);
答案 0 :(得分:4)
您实际上正在减少分配的空间,而不是增加它。 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_arr
整数的空间。
请注意,使用temp变量存储结果是一种很好的做法
realloc
。当realloc
失败时,原始内存不被释放,所以如果你
不要使用临时变量,那么你将丢失指向原始的指针
存储器中。
答案 1 :(得分:3)
只需比较代码的两行:
int *arr = (int *)malloc(sizeof(int)*size_arr);
arr = (int *)realloc(arr, size_arr);
你是否看到两个电话的最后一个参数的区别?因为重新分配时会将数组缩小为两个字节,因此数组内容会丢失,行为会略微未定义。
给realloc
一个合适的尺寸,您就会看到它保留原始数据。