2016-06-20 4 views
-3

Мне нужно запомнить, сколько памяти я выделил с помощью realloc(). Помогите мне если (массив!)C Память Realloc

array=(Type*) calloc(1,sizeof(Type)); 

else 

    array=(Type*)realloc(array,(cont+1)*sizeof(Type));  



array[cont].setName(....); 


cont++; 

Это не работает: после firt вставки, это сказать: Нарушение прав доступа Я инициализируется прод = 0 в конструкторе моего класса и освобождается память в деструкторе ,

+1

Почему бы не использовать 'зЬй :: VECTOR' ? – NathanOliver

+2

предоставьте [MCVE]. Что такое 'c',' array' и 'Type'? – user463035818

+5

Просьба уточнить. * Это не работает * не объясняет, в чем проблемы. –

ответ

1

Смотрите комментарии добавлены к коду:

int count=0; 
if(!array) 
    array=(Type*) calloc(count,sizeof(Type*); // Problem: 
               // missing) 
               // use sizeof(Type) 
               // calling calloc with count being zero 
               // so you do not allocate any memory 
               // use 1 instead of count 

array[c].setName(EditName->Text); 
c++; 
count++; 
array=(Type*)realloc(array,count*sizeof(Type*)); // Problem: 
                // use sizeof(Type) 

так это должно выглядеть:

int count=0; 
if(!array) 
    array=(Type*) calloc(1,sizeof(Type)); 

array[c].setName(EditName->Text); 
c++; 
count++; 
array=(Type*)realloc(array,count*sizeof(Type)); 

Переменная c должна быть инициализирована в ноль перед запуском этого кода

Аналогично array сусло nullptr перед запуском этого кода

EDIT

Там, кажется, еще одна проблема, если вы намерены запустить этот код несколько раз (который я предполагаю, что вы).

Эта линия:

array=(Type*)realloc(array,count*sizeof(Type)); 
          ^^^^^ 
       Don't use count here as you always sets count to zero 

Магистраль должна быть:

array=(Type*)realloc(array,c*sizeof(Type)); 

В целом, кажется, нет никакого реального использования count

+0

Я их скорректировал – Agata

+0

Он не работает одинаково – Agata

+0

Такая же проблема? Как инициализируется 'c'? Он должен быть равен нулю. – 4386427