Я возникла проблемы упаковочных мой мозг вокруг правильного использования указателей с массивами в С.Изменение размера массива в пределах структуры в C
проекта я работаю над строю простой динамический массив и функцию, чтобы идти вместе с этим. Однако, похоже, я не могу найти правильный синтаксис/функции для динамического обновления размера массива. Вот код Релевента:
Создание массива:
struct DArray
{
TYPE *data; /* pointer to the data array */
int size; /* Number of elements in the array */
int capacity; /* capacity ofthe array */
};
void initDArray(DArray *v, int capacity)
{
assert(capacity > 0);
assert(v!= 0);
v->data = (TYPE *) malloc(sizeof(TYPE) * capacity);
assert(v->data != 0);
v->size = 0;
v->capacity = capacity;
}
DArray* createDArray(int cap)
{
assert(cap > 0);
DArray *r = (DArray *)malloc(sizeof(DArray));
assert(r != 0);
initDArray(r,cap);
return r;
}
И немного проблемы, в его текущем неработающий формы:
void _DArraySetCapacity(DArray *v, int newCap)
{
TYPE * newptr = createDArray(newCap);
newptr = (TYPE *) malloc(sizeof(TYPE) * newCap);
v->capacity = newCap;
v->data = newptr;
}
Мой метод в том, чтобы создать временный указатель с увеличенными затем скопируйте существующую дату и укажите указатель данных в новом местоположении. Я подозреваю, что, возможно, я рассматриваю проблему совершенно неправильно.
Любые подсказки или указатели (предназначенные для каламбуров) будут оценены по достоинству. Заранее спасибо.
Вы можете прочитать о функции ['realloc'] (http://en.cppreference.com/w/c/memory/realloc).Кроме того, вы [не должны приводить результат 'malloc' (или' realloc')] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc/605858#605858). –
Похоже, вы используете компилятор C++ для компиляции C. (определения struct не являются typedefs в C, в C++ они) – wildplasser
, поэтому вы исправили свою проблему с утверждением, а затем - вы обновили вопрос или приняли ответ? Просто посмотрел - нет, вы не сделали – pm100