Question

La fonction CreateFileMapping renvoie un pointeur vers un fichier mappé en mémoire, et je souhaite traiter que le mappage de la mémoire sous forme de tableau.

Voici ce que je veux essentiellement faire:

char Array[] = (char*) CreateFileMapping(...);

Sauf apparemment, je ne peux pas brandir simplement mes bras et déclarer qu'un pointeur est maintenant un tableau.

Avez-vous les gars avez une idée comment je peux le faire? Je ne veux pas copier les valeurs du pointeur pointe vers dans le tableau parce que cela va utiliser trop de mémoire avec des fichiers volumineux.

Merci un groupe,

Était-ce utile?

La solution

Vous n'avez pas besoin. Vous pouvez indexer un pointeur comme si elle était un tableau:

char* p = (char*)CreateFileMapping(...);
p[123] = 'x';
...

Autres conseils

En C / C ++, les pointeurs et les tableaux ne sont pas la même chose.

Mais dans votre cas, à vos fins, ils sont.

Vous avez un pointeur.

Vous pouvez lui donner un indice.

par exemple. un pointeur char * correspond au début de « bonjour »

pointeur [0] est le premier caractère 'h'

pointeur [1] est le second caractère 'e'

Il suffit donc de le traiter comme vous pensez à un tableau.

« En C / C ++, les pointeurs et les tableaux ne sont pas la même chose. » est vrai, mais le nom de la variable du tableau est le même que celui d'un pointeur const (ce qui est de mon ancien Coriolis C ++ Black Book je me souviens bien). À savoir:

char carray[5];
char caarray2[5];
char* const cpc = carray;    //can change contents pointed to, but not where it points

/*
  cpc = carray2;    //NO!! compile error
  carray = carray2; //NO!! compile error - same issue, different error message
*/

cpc[3] = 'a';  //OK of course, why not.

Hope this helps.

Mais comment pointeur est différent de tableau? Quel est le problème avec

  

char *Array = (char*)CreateFileMapping(...);

Vous pouvez traiter les Array plus ou moins comme vous traiteriez un tableau à partir de maintenant.

Vous pouvez utiliser un casting C-style:

char *p = (char*)CreateFileMapping(...);
p[123] = 'x';

Ou la distribution de réinterpréter préféré:

char *p std::reinterpret_cast<char*>(CreateFileMapping(...));
p[123] = 'x';

Je cherchais aussi pour cette réponse. Ce que vous devez faire est de créer votre propre type de tableau.

    static const int TickerSize = 1000000;
    int TickerCount;
    typedef char TickerVectorDef[TickerSize];

Vous pouvez également jeter votre pointeur dans ce nouveau type. Sinon, vous obtenez « erreur du compilateur C2440 ». Il doit être un tableau de taille fixe cependant. Si vous utilisez uniquement comme un pointeur, pas de mémoire réelle est allouée (sauf 4-8 octets pour le pointeur lui-même).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top