2009-11-01 3 views
0

Je suis en train de créer un tableau de tampons. J'ai besoin de stocker un entier dans chaque tampon. Je ne suis pas tout à fait sûr comment cela devrait être fait.Tableau de tampons en programmation C?

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

Qu'est-ce que je fais de mal? Ce code ne fonctionne pas vraiment.

+0

Attendez, quel est le but de BUFFER_LENGTH ici? Chaque tampon stocke-t-il plusieurs entiers, ou un tampon ne stocke-t-il qu'un seul nombre entier? De plus, qu'est-ce que 'n' dans votre boucle for? Y at-il une raison pour laquelle vous n'utilisez pas 'memset' pour initialiser les tampons? – Amber

+0

Vous devez stocker un seul entier dans chaque tampon? '& pBuffers [i]' ne peuvent pas non plus être sur le côté gauche d'une station d'affectation. –

+0

Quelle est la valeur de n? – dicroce

Répondre

4

Vous pouvez allouer suffisamment d'espace. Juste là vous allouez seulement assez d'espace pour 10 ints; On dirait que vous voulez allouer assez pour 500. Le moyen simple est int buffers[10][50]. Mais si vous voulez calloc, vous devez calloc(BUFFER_LENGTH, sizeof(int))numberOfBuffers fois.

En outre, calloc efface automatiquement la mémoire allouée, donc pas besoin de le faire.

#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 
} 
+0

c'est correct Je devais créer un nouveau tampon chaque fois dans le tableau. – user69514

+0

comment initialiser chaque tampon à zéro? Je reçois l'erreur suivante: functions.h: 28: avertissement: affectation rend entier à partir du pointeur sans un cast alors quand j'essaie d'imprimer chaque élément, je reçois un défaut de segmentation – user69514

+0

calloc zéros de la mémoire allouée – jmucchiello

0

Je suis très rouillé en C, mais je pense que vous devriez changer

&pBuffers[i] = 0x00; 

à

pBuffers[i] = 0x00; 

(Le [i] signifie que vous accédez déjà l'élément dans un endroit i il n'est donc pas nécessaire d'ajouter le &.)

Mais je peux me tromper :-(

0

Je pense que ce que votre demande est un tableau de tableaux, qui n'est pas ce que vous faites ici dans le code, plutôt que vous avez créé un tableau.

Essayez quelque chose comme:

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

Comme d'autres ont dit calloc à 0 pour initialise vous afin que vous n'avez pas besoin de répéter que le travail. Vous devrez peut-être définir int i en dehors de la boucle for en fonction de la version de C que vous utilisez.

Il y a d'autres choses qui peuvent être dites sur le style et les conventions de nommage, mais une étape à la fois :)

1

Qu'est-ce que vous créez avec votre échantillon est un tableau d'entiers. Au lieu de cela, vous souhaiterez créer un tableau de tableaux entiers. L'installation est similaire, mais vous devez déclarer la variable comme int** et allouer chaque tampon individuellement.

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

Il n'y a pas beaucoup d'intérêt à passer par les réseaux et l'initialisation à 0 car calloc va déjà faire pour vous.

Bien sûr, plus facile chose si vous connaissez la taille de chaque tampon va être les constantes serait de le mettre sur la pile (et le changement que vous êtes tailles int à constantes):

int ppBuffer[numberOfBuffers][BUFFER_LENGTH] = { 0 }; 
+0

J'essaie de créer un tableau de tampons. Tous ces tampons agiront comme une mémoire partagée entre différents processus. Chaque processus va lire et écrire un entier dans les tampons. Donc, fondamentalement, j'ai besoin d'un tableau de tampons, et stocké le zéro entier dans chaque tampon initialement. Je continue à obtenir cette erreur: affectation rend entier de pointeur sans un cast – user69514

+0

qui serait à cette ligne bufferArr [i] = (int *) calloc (BUFFER_LENGTH, sizeof (int)); – user69514

+0

J'ai changé (int *) à (int) et je ne reçois plus l'erreur. Cependant, j'ai toujours une erreur de segmentation quand j'ai essayé de lire dans les tampons. – user69514