动态内存新功能。 realloc();

时间:2016-03-29 06:47:54

标签: dynamic realloc

我此刻正在尝试学习,但发送给我的文件不正确。我尝试修复了一些事情,但它开始了,然后它就崩溃了。我学习动态记忆,所以我不知道。这是realloc();

的代码
 #include <stdio.h> /* printf, scanf, NULL */

    #include <stdlib.h> /* malloc, free, rand */

    int main ()

{

 int count=0,i;

 int *stations=NULL,*ptrToStations=NULL;



for(i=1;i<=7;i++,count++)
    {

ptrToStations=(int*)realloc(stations,count*sizeof(int));

if(ptrToStations!=NULL)//заделили сме памет

 { stations = ptrToStations;

 ptrToStations[count]=i;}

    }

for(i=0;i<7;i++)

printf("%d",stations[i]);

printf("\n");



//добавяне на 8 елемент

ptrToStations=(int*)realloc(stations,++count*sizeof(int));

if(ptrToStations!=NULL)//заделили сме памет

 { stations = ptrToStations;

 ptrToStations [count-1]=count;}



 for(i=0;i<count;i++)

printf("%d",stations[i]);

printf("\n");

int x=3;

//преместваме елементите с един назад

for(i=x;i<count;i++)


ptrToStations[i-1]=ptrToStations[i];

//премахване на 8 елемент

ptrToStations=(int*)realloc(stations,--count*sizeof(int));

if(ptrToStations!=NULL)//заделили сме памет



 stations = ptrToStations;



for(i=0;i<count;i++)


printf("%d",stations[i]);

printf("\n");


 free (ptrToStations);

 free (stations);

 return 0;

}

1 个答案:

答案 0 :(得分:0)

你在这里遇到了几个问题

  1. 最后双重释放相同的内存块
  2. count应该从1开始。在第一次迭代时,你试图将内存块的大小改为0字节
  3. 出于数组绑定错误 ptrToStations [数] = I;
  4. 您的代码应该看起来像这样

    #include <stdio.h> /* printf, scanf, NULL */
    
        #include <stdlib.h> /* malloc, free, rand */
    
        int main ()
    
    {
    
     int count=1,i;
    
     int *stations=NULL,*ptrToStations=NULL;
    
    
    
    for(i=1;i<=7;i++,count++){
    
        ptrToStations=(int*)realloc(stations,count*sizeof(int));
    
        if(ptrToStations != NULL) { 
            stations = ptrToStations;
            ptrToStations[count-1]=i;
            for(i=0;i<count;i++)
                printf("%d",stations[i]);
            printf("\n");
        }
    }
    
    
    
    
    
    //добавяне на 8 елемент
    
    ptrToStations=(int*)realloc(stations,++count*sizeof(int));
    
    if(ptrToStations!=NULL){ 
        stations = ptrToStations;
        ptrToStations [count-1]=count;
        }
    
    
    
     for(i=0;i<count;i++)
        printf("%d",stations[i]);
    printf("\n");
    
    int x=3;
    
    //преместваме елементите с един назад
    
    for(i=x;i<count;i++)
        ptrToStations[i-1]=ptrToStations[i];
    
    //премахване на 8 елемент
    
    ptrToStations=(int*)realloc(stations,--count*sizeof(int));
    
    if(ptrToStations!=NULL) {
        stations = ptrToStations;
        for(i=0;i<count;i++)
            printf("%d",stations[i]);
    printf("\n");
    }
    
    
     free (stations);
    
     return 0;
    
    }