C:在分离函数中使用realloc()不会';不改变数组大小
我觉得这不应该是一个很难解决的问题,我已经尝试了我在类似问题上所发现的一切,但都无济于事,所以我想我应该试着问问自己。我的代码(简化)如下:C:在分离函数中使用realloc()不会';不改变数组大小,c,C,我觉得这不应该是一个很难解决的问题,我已经尝试了我在类似问题上所发现的一切,但都无济于事,所以我想我应该试着问问自己。我的代码(简化)如下: #include <stdio.h> #include <stdlib.h> void setArraySize(int** arr) { int arrSize; printf("\nEnter array size: "); scanf("%d", &arrSize); int* tmp
#include <stdio.h>
#include <stdlib.h>
void setArraySize(int** arr) {
int arrSize;
printf("\nEnter array size: ");
scanf("%d", &arrSize);
int* tmp = realloc(*arr, arrSize);
if (tmp == NULL) {
printf("Error");
return;
}
*arr = tmp;
}
void auswahl() {
int* arr = NULL;
setArraySize(&arr);
free(arr);
}
int main() {
auswahl();
return 0;
}
#包括
#包括
void setArraySize(整数**arr){
内角大小;
printf(“\n输入数组大小:”);
scanf(“%d”、&arrSize);
int*tmp=realloc(*arr,arrSize);
if(tmp==NULL){
printf(“错误”);
返回;
}
*arr=tmp;
}
void auswahl(){
int*arr=NULL;
设置阵列化(&arr);
免费(arr);
}
int main(){
auswahl();
返回0;
}
调试时,我注意到我的数组只包含整数-84215041。我正在使用Microsoft Visual Studio 2019社区。此外,即使在尝试最基本和最安全的函数时,我也会得到相同的结果。那么,问题是否与视觉工作室有关
#include <stdio.h>
#include <stdlib.h>
void increase(int** data)
{
int* tmp = realloc(*data, 20);
if (tmp == NULL) {
printf("Error");
return;
}
*data = tmp;
}
int main() {
int* arr = NULL;
increase(&arr);
printf("%d", sizeof(arr));
return 0;
}
#包括
#包括
无效增加(整数**数据)
{
int*tmp=realloc(*数据,20);
if(tmp==NULL){
printf(“错误”);
返回;
}
*数据=tmp;
}
int main(){
int*arr=NULL;
增加&arr;
printf(“%d”,sizeof(arr));
返回0;
}
提前感谢您的帮助 我稍微更改了您的第二个代码(添加了printf),它将帮助您了解正在发生的事情
#include <stdio.h>
#include <stdlib.h>
void increase(int** data)
{
printf ("in increase|*data|%p|\n", *data);
int* tmp = realloc(*data, 20);
printf ("in increase|*data after realloc|%p|\n", *data);
printf ("in increase|tmp after realloc|%p|\n", tmp);
if (tmp == NULL) {
printf("Error");
return;
}
*data = tmp;
printf ("in increase|*data after assign|%p|\n", *data);
}
int main() {
int* arr = NULL;
printf ("in main|arr|%p|\n", arr);
printf ("in main|arr size|%d|\n", sizeof(arr));
increase(&arr);
printf ("in main|arr after increase|%p|\n", arr);
printf ("in main|arr size after increase|%d|\n", sizeof(arr));
return 0;
}
所以基本上,arr
的大小不会改变,因为它不是数组,它是指向int的指针,这里的大小是8,因为它是64位的机器,64位的内存地址需要存储8个字节,这就是sizeof()
返回给定类型的字节大小(int*arr
指向int的指针)
对于其他值,您可以看到您已经在堆中的地址0x2441010
处有效地分配了内存,因此您的引号“array”引号(它不是数组)从该地址开始,并且有足够的空间容纳20个(字节),如果您想要20个整数,您应该使用realloc(…,20*sizeof(int))
因为这些alloc函数使用字节作为单位
希望这能对您有所帮助。我的数组只包含整数-84215051-它应该包含什么?如果使用
calloc
它将包含0
。代码中的所有内容都按预期工作。realloc
不会将任何内容放入数组中。它只是为数组保留内存。如果您需要数组中的某些内容,您需要在数组中放入一些内容。在“c”中,绝对无法获得动态分配的数组大小。因此,不要尝试。
in main|arr|(nil)|
in main|arr size|8|
in increase|*data|(nil)|
in increase|*data after realloc|(nil)|
in increase|tmp after realloc|0x2441010|
in increase|*data after assign|0x2441010|
in main|arr after increase|0x2441010|
in main|arr size after increase|8|