2016-03-29 3 views
0

В настоящее время я пытаюсь учиться, но файл, который был отправлен мне, неверен. Я попытался исправить пару вещей, но он начинается, и сразу после этого он раздавит. Я изучаю динамическую память, поэтому я этого не знаю. Вот код для 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; 

} 
+0

Код комментарии должны быть на английском языке –

ответ

0

У вас было несколько проблем здесь

  1. двойного освобождения одного и того же куска памяти в конце
  2. отсчет должен начинаться с 1. Overwise на первой итерации вы пытаетесь изменить размер блок памяти для 0 байтов
  3. ошибка связанная с массивом ptrToStations [count] = i;

Ваш код должен выглядеть на самом деле этого

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

}