Массив буферов в программировании на C? - PullRequest
0 голосов
/ 02 ноября 2009

Я пытаюсь создать массив буферов. Мне нужно хранить целое число в каждом буфере. Я не совсем уверен, как это должно быть сделано.

int BUFFER_LENGTH = 50;   //the size of each buffer
int numberOfBuffers = 10; //number of buffers
int *pBuffers;          //array of buffers

    pBuffers = (int *) calloc (numberOfBuffers, sizeof(int)); //make array size of numberOfBuffers

    int i;
    for (i = 0; i < n; i++){     //initialize each buffer to zero.
        &pBuffers[i] = 0x00;
  }

Что я делаю не так? Этот код на самом деле не работает.

Ответы [ 4 ]

4 голосов
/ 02 ноября 2009

Возможно, вы захотите выделить достаточно места. Тут вы только выделяете достаточно места для 10 дюймов; похоже, что вы хотите выделить достаточно для 500. Простой способ - int buffers[10][50]. Но если вы хотите позвонить, вам нужно calloc(BUFFER_LENGTH, sizeof(int)) numberOfBuffers раз.

Кроме того, calloc автоматически очищает выделенную память, поэтому нет необходимости делать это.

#define BUFFER_LENGTH 50 /* the size of each buffer */
#define BUFFERS 10       /* number of buffers       */
int **pBuffers;          /* array of buffers        */

pBuffers = calloc (BUFFERS, sizeof(int *)); //make array of arrays
int i;
for (i = 0; i < BUFFERS; i++) {
  pBuffers[i] = calloc(BUFFER_LENGTH, sizeof(int)); // make actual arrays
}
1 голос
/ 02 ноября 2009

То, что вы создаете с помощью своего примера - это массив целых чисел. Вместо этого вы захотите создать массив целочисленных массивов. Настройка аналогична, но вам нужно объявить переменную как int** и выделить каждый буфер отдельно.

int **ppBuffer = (int**) calloc(numberOfBuffers, sizeof(int*));
for(int i = 0; i < numberOfBuffers; ++i)
    ppBuffer[i] = (int*) calloc(BUFFER_LENGTH, sizeof(int));

Нет особого смысла проходить и инициализировать массивы равными 0, поскольку calloc уже сделает это за вас.

Конечно, проще всего, если вы знаете, что размер каждого буфера будет константой, было бы поместить его в стек (и изменить ваши значения int на константы):

int ppBuffer[numberOfBuffers][BUFFER_LENGTH] = { 0 };
0 голосов
/ 02 ноября 2009

Я думаю, что вы спрашиваете о массиве массивов, а это не то, что вы делаете здесь в коде, скорее вы создали один массив.

Попробуйте что-то вроде:

#define BUFFER_LENGTH 50
#define numberOfBuffers 10

int** pBuffers;

pBuffers = (int**) calloc(numberOfBuffers, sizeof(int*));

for (int i = 0; i < numberOfBuffers; i++)
    pBuffers[i] = (int*) calloc(BUFFER_LENGTH, sizeof(int));

Как говорили другие, calloc инициализируется для вас 0, поэтому вам не нужно повторять эту работу. Вам может потребоваться определить int i вне цикла for в зависимости от используемой версии языка C.

Есть некоторые другие вещи, которые можно сказать о стилях и соглашениях об именах, но по одному шагу за раз:)

0 голосов
/ 02 ноября 2009

Я очень ржавый в C, но я думаю, что вы должны изменить

 &pBuffers[i] = 0x00;

до

 pBuffers[i] = 0x00;

([i] означает, что вы уже получаете доступ к элементу в местоположении i , поэтому нет необходимости добавлять &.)

Но я могу ошибаться: - (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...