C 结构的真实位置
因此,我可以查看它是否转到C 结构的真实位置,c,memory-management,structure,realloc,C,Memory Management,Structure,Realloc,因此,我可以查看它是否转到realloc。它打印: malloc成功,新尺寸为6 它要求我给出电影的代码和我们想要的名字。我给出一个代码和名字,然后我再次打印列表。它会打印我给出的5部电影,但不会打印第6部电影 例如: printf(" malloc successful,size now is :%d \n",dvds->numdvds); 假设这是我拍的第五部电影。那么第六个是这样的 Dvdcode is 5 dvd name is: tarzan Customer id is: -
realloc
。它打印:
malloc成功,新尺寸为6
它要求我给出电影的代码和我们想要的名字。我给出一个代码和名字,然后我再次打印列表。它会打印我给出的5部电影,但不会打印第6部电影
例如:
printf(" malloc successful,size now is :%d \n",dvds->numdvds);
假设这是我拍的第五部电影。那么第六个是这样的
Dvdcode is 5
dvd name is: tarzan
Customer id is: -1(the initialized value)
这是什么意思
realloc
不工作?C中的数组基于0
,即第一个元素是array[0]
第二个元素是array[1]
,依此类推
因此,insertMovie()
的这些行:
应为:
if(dvds->numdvds>=(*n))
{
dvds->numdvds++;
dvds->dvd=realloc(dvds->dvd,(dvds->numdvds)*sizeof(dvdtype));
if(dvds->dvd==NULL){
printf("not enough memory\n");
exit(1);
}
printf(" realloc succesful,size now is :%d \n",dvds->numdvds);
dvds->dvd[dvds->numdvds].customerID=-1;
dvds->dvd[dvds->numdvds].daysowned=-1;
printf("give code and name of movie \n");
scanf("%d\n",&code);
dvds->dvd[dvds->numdvds].dvdcode=code;
gets(dvds->dvd[dvds->numdvds].title);
旁注:
X=realloc(X,…)代码>是个坏主意。如果realloc
失败,您将丢失指针(X
),这意味着无法恢复以及内存泄漏。谢谢,但是否有其他分配内存的方法?@Shahbaz的意思是这样使用realloc
:Y=realloc(X,…)代码>。不要将返回值保存在X
本身中。首先检查Y
是否为非NULL
,然后执行X=Y
。啊。好的。我理解你的意思。但在我的其他函数中,我将其作为参数delete(*X)传递,例如…如果我使用Y=realloc(X,…);当我必须调用realloc时,我将如何处理Y…在我的所有其他函数中,我将X作为参数传递..无论如何…有人能解决问题吗..我不知道出了什么问题..谢谢。。!!我不工作。。。!!非常感谢用户界面。但我不明白为什么它是这样工作的。基本上,您唯一更改的是//numdvds++。。当我完成插入前5部电影时,numdvds等于5,所以当我这样做(numdvds++;)时,它应该等于6..那么使用realloc时,计算机必须给出6*sizeof(..)我的想法正确吗。。?我看不出有什么区别@alk@user3430128:不,我没有移动dvds->numdvds++代码>。您可能想重读我答案的第一句话,看看我引用的代码在我修改之前是如何使用标记的,以及在我修改之后是如何使用标记的,想一想并从中得到启示。@user3430128:如果您喜欢某个答案,您可以自由地对其进行投票。如果您甚至觉得它是您问题的答案,您可以通过单击其复选标记来标记它。
Dvdcode is 0
dvd name is:
Customer id is: 0
(Dvd name is empty)
if(dvds->numdvds>=(*n))
{
dvds->numdvds++;
dvds->dvd=realloc(dvds->dvd,(dvds->numdvds)*sizeof(dvdtype));
if(dvds->dvd==NULL){
printf("not enough memory\n");
exit(1);
}
printf(" realloc succesful,size now is :%d \n",dvds->numdvds);
dvds->dvd[dvds->numdvds].customerID=-1;
dvds->dvd[dvds->numdvds].daysowned=-1;
printf("give code and name of movie \n");
scanf("%d\n",&code);
dvds->dvd[dvds->numdvds].dvdcode=code;
gets(dvds->dvd[dvds->numdvds].title);
if(dvds->numdvds>=(*n))
{
dvds->dvd=realloc(dvds->dvd,(dvds->numdvds + 1)*sizeof(dvdtype));
if(dvds->dvd==NULL){
printf("not enough memory\n");
exit(1);
}
printf(" realloc succesful,size now is :%d \n",dvds->numdvds + 1);
dvds->dvd[dvds->numdvds].customerID=-1;
dvds->dvd[dvds->numdvds].daysowned=-1;
printf("give code and name of movie \n");
scanf("%d\n",&code);
dvds->dvd[dvds->numdvds].dvdcode=code;
gets(dvds->dvd[dvds->numdvds].title);
dvds->numdvds++;