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++;