Давайте начнем с начала:
int *bufferP = (int*)malloc(2*sizeof(int));
int *bufferN = (int*)malloc(2*sizeof(int));
Это правильно, но вы не должны разыгрывать (не используйте (int*)
) результат malloc ().Поиск "бросить результат malloc".И кроме того, зачем выделять 2 слота, если вы планируете увеличивать их по мере необходимости?Почему не 10 или 100?Почему не только один?
Давайте продолжим:
if(*bufferN == NULL){
printf("No more place");
exit(0);
}
Здесь вы должны рассмотреть буфер N, а не то, на что он указывает.NULL используется для проверки самих указателей, а не значений, указанных указателями;Вот почему компилятор жалуется.В любом случае, обратите внимание, что bufferN никогда не изменит значение само по себе, поэтому не пытайтесь сравнивать его, чтобы понять, заполнен ли буфер.Единственный способ сделать это - подсчитать, сколько предметов вы положили.
Наконец:
*bufferN= number;
*bufferN++;
вы правильно сохраните число в месте, указанном указателем.Может быть в порядке.Но в следующей строке вы хотите увеличить указатель, но также разыменовать его.Это не так, но необычно - на самом деле компилятор снова жалуется.
Буфер работает как вкладка, верно?
Неверно.Буфер - это зона памяти, которой вы манипулируете, возможно, с помощью указателей, которыми вы в свою очередь манипулируете.Вы должны отслеживать, что происходит.
В «Нет больше места» я должен удвоить размер буфера, и я не знаю, как это сделать.
Для этого вы используете realloc ().
Я не хочу делать всю работу за вас, но могу объяснить, что вам нужно.Я буду говорить об одном буфере, другой - тот же.
Сначала выделите буфер, как вы делаете сейчас, но для одного слота.И введите счетчик (целое число) для подсчета количества чисел в буфере.Счетчик изначально равен 0.
Когда пользователь вводит число, вы сохраняете его следующим образом:
bufferN[counterN] = number;
counterN++;
На данный момент вы знаете, что буфер заполнен.Мы начали с буфера только с одним (и свободным) слотом, теперь у нас его нет ... почему бы не изменить размер буфера, чтобы снова добавить свободный слот?Мы знаем, что у нас есть counterN
элементов в буфере, что буфер заполнен, поэтому мы хотим новый буфер с пазами counterN + 1;realloc () может делать то, что нам нужно.
Обратите внимание, что для чтения и записи в буфере синтаксис bufferN [...] прост и безопасен, потому что теперь вы всегда (через counterN) увеличиваете размер буфера.и сколько предметов в нем содержится.И вы не касаетесь самого указателя.
Есть и другие способы сделать это, но это один - не самый чистый, но разумный.Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: увидев другой ответ, я понял, что требуется удвоить размер буфера .Мое предложение выше не соответствует этому требованию.Извините ... больше работы для вас ... мы (вы) должны учитывать не только элементы, которые добавляются в буфер, но и его размер.Просто еще одна целочисленная переменная для управления.Ну, был бы трюк, чтобы избежать этого, но давайте оставим в покое: -)