-1
我正在尝试使用realloc
减小char **
双指针的大小。 首先char **
指针分配使用malloc
,然后个人char*
指针如下所示。如果我使用realloc减少char **指针的大小,它是否会在内部释放减小大小的个别char *指针
char **first= (char**)malloc(num*sizeof(char*));
char **last=(char**)malloc(num*sizeof(char*));
for(int i=0;i<num;i++)
{
//each individual pointer holds 20 characters
first[i]=(char*)malloc(20*sizeof(char));
last[i]=(char*)malloc(20*sizeof(char));
}
现在一些操作后,我想通过一个计数器值,其中计数器小于num
减少第一个和最后的大小。
目的是释放最后的计数器记录数。
如果我下面
//Freeing up internal pointer memories
i = 0;
while (i<counter)
{
free(first[num1-1 - i]);
free(last[num1-1-i]);
i++;
}
//Reducing the size of the double pointer using realloc
first = (char **)realloc(first, (num1-counter) * sizeof(char *));
last = (char **)realloc(last, (num1-counter) * sizeof(char *));
在此之后,如果我打印的记录
for(i=0; i<num - counter; i++){
printf("First Name: %s ",first[i]);
printf("Last Name: %s ",last[i]);
}`
的最后一条记录似乎已损坏。
如果我只是执行以下操作并且不释放个人char *
指针,它工作正常。
first = (char **)realloc(first, (num1-counter) * sizeof(char *));
last = (char **)realloc(last, (num1-counter) * sizeof(char *));
我的问题是没有一个双指针的realloc
缩小尺寸,内部节省了内部指针和为我做这两个,这是一些如何堕落的记忆?
您正在使用正确的技术。这听起来像你的代码在其他地方有一个错误。请发布[MCVE](http://stackoverflow.com/help/mcve) –
[不要在C中投射malloc](http://stackoverflow.com/q/605845/995714) –
用'num完成分配','free()'用'num1'完成。用'num1'完成重新分配。用'num'完成打印 - >嗯? – chux