2009-11-29 6 views
1

J'ai un pointeur sur mon tableau char comme ceci.Passage d'un pointeur sur un tableau char vers une fonction

unsigned char *recvBuf; 
    recvBuf = (unsigned char *)malloc(sizeof(char)*RECVBUF); 

Je passe alors que, pour une fonction définie comme

void setHeader(MyHeader *myHeader, unsigned char *buffer) 

qui copie les 12 premiers octets dans un struct

Alors je tente de passer à une autre fonction plus tard

Record readRecord(unsigned char *buffer, int *arrayPosition, int buffsize) 

Mais le programme ne répond toujours pas lorsque j'essaie d'accéder à une partie du tableau ing [], exactement de la même manière que dans la précédente. Et je vais aussi bien y accéder comme ça avant de le passer à la fonction.

Des idées seraient grandement appréciées.

Merci

EDIT:

Pointeurs sont les mêmes.

C'est à l'intérieur de la deuxième fonction

J'ai ajouté ce code au dessus et il fonctionne très bien

int k = *arrayPosition; 
    printf("%p \n", buffer); 

    printf("%c \n", buffer[k]); 

Voici le code original, le programme devient adfter ne répond i = * de arrayposition .. .

int i, j; 
Record *myRecord; 
Resource *myResource; 
unsigned char name[255]; 
unsigned char data[50]; 
unsigned int offset; 

i = *arrayPosition; 

while(buffer[i] != '\0') 
{ 
    if((buffer[i] & 0xC000) == 0xC000) 
    { 
+0

Etes-vous sûr de ne pas modifier la valeur du pointeur dans l'une des fonctions? Détestez-vous le pointeur lors de l'insertion de données? – Jack

+2

Quelques soucis stylistiques: En C (mais pas en C++), il est généralement considéré comme un mauvais style de convertir la valeur de retour de 'malloc', car' void * 'est implicitement converti en un autre type de pointeur. De même, 'sizeof (char)' est toujours 1 en C (et C++), donc multiplier par lui est redondant. La deuxième ligne de code devrait juste être ceci: 'recvBuf = malloc (RECVBUF);'. – bcat

+0

Je pense que la plupart des compilateurs supprimeront cette redondance. Parfois, il est juste utilisé pour écrire du code plus clair: size_of_item * number_of_items – Jack

Répondre

2

vraiment besoin plus de contexte pour aider ici, il n'y a rien évidemment fâcheux de ce que vous avez dit.

Principes de base:

  1. Vérifiez que vous ne l'avez pas indexé hors la fin de votre bloc de mémoire.
  2. Vérifiez que vous ne transmettez pas & recvBuf où vous voulez passer recvBuf? Un compilateur devrait attraper ceci, mais vous pourriez jeter votre pile si vous l'avez fait, peut-être en utilisant une distribution.
1

entrée ne suffit pas pour être sûr du problème qui rend le pointeur aller mal, mais une bonne prise serait de vérifier avec gdb si le pointeur entre la fonction que vous appelez descripted.

Modifiez-vous un caractère de la matrice? Vous devriez déréférencer le pointeur avec * dans ce cas.

Si vous ne pouvez pas utiliser le pointeur après les causes d'appel peut être:

  1. il est changé par erreur dans la fonction
  2. il est un pointeur sur une valeur attribuée dans la pile qui est désallouée quelque part implicitement (mais cela semble étrange)
Questions connexes