【发布时间】:2016-10-03 13:10:44
【问题描述】:
我想写一个函数来改变动态数组的大小并允许用户一次填充它。我知道我应该使用“realloc”来做到这一点(所以我这样做了,所以它起作用了......)但我的第一次尝试看起来像这样:
void ChangeDynamicArraySize(int* dArray, int oldSize, int newSize){
int* tempArray = (int*) malloc(sizeof(int) * oldSize);
CopyArray(tempArray, dArray, oldSize);
free(dArray);
dArray = (int*) malloc(sizeof(int) * newSize);
CopyArray(dArray, tempArray, oldSize);
for (int i = oldSize; i < newSize; i++){
scanf("%i", &dArray[i]);
}
PrintArray(dArray, newSize);
free(tempArray);
}
在函数体中“PrintArray(dArray, newSize);”工作正确。 但是当从 main() 调用时,它会给出如下结果: - 17891602 - 17891602 - 17891602 - 17891602
所以看起来 dArray 被释放了...?但据我所知,分配的内存不会在退出函数后自动释放。
那可能是什么原因呢?
【问题讨论】:
-
A,而 CopyArray 只是我的 memcpy() 版本
-
dArray是按值传递的,您只是更改其本地副本。
标签: c malloc dynamic-memory-allocation memcpy realloc