Comment déclarer une variable de taille de tableau 2D en C?
J'ai un problème avec un projet. J'ai créer une variable de taille de tableau 2D pour le stockage de certaines erreur de prédiction..donc c'est à propos des images. Le problème est que je dois charger des images de différentes tailles de sorte que pour chaque image que j'ai trouver dans un fichier le tableau 2D avec la correspondate nombre de pixels..j'ai cherché parmi les à vos questions, mais ce n'est pas ce que je cherche.Quelqu'un peut-il m'aider?
Merci
OriginalL'auteur astefan | 2012-02-21
Vous devez vous connecter pour publier un commentaire.
Si vous avez un moderne compilateur C (au moins C99) en fonction de la portée c'est aussi simple que:
cela s'appelle une variable length array (VLA). Il peut avoir des problèmes si le tableau est trop grand. Donc si vous avez des images de grande taille que vous pouvez faire:
et plus tard
eh bien, c'est pourquoi j'ai aussi mentionné la version qui est allouée à
malloc
. Et même alors, il est une "variable du type modifié". Et C++ clairement a d'autres façons de faire des tableaux multidimensionnels, donc oui, ce n'est pas pertinente du tout.OriginalL'auteur Jens Gustedt
Si vous avez besoin de la mémoire pour être contiguë, vous avez un couple de choix.
Vous pourrait allouer dynamiquement un seul bloc de mémoire, puis calculer vos corrections manuellement, comme suit:
Vous pourriez mettre en place un deuxième tableau de pointeurs dans le tableau principal:
oublier que l'on aurait gratuit les deux
arr
etarrp
.Si vous avez un C99 mise en œuvre, vous pouvez simplement mettre en place un pointeur vers un VLA, comme suit:
Noter que dans ce cas, vous n'êtes pas d'allouer de la mémoire pour un réseau secondaire, ni avez-vous besoin de calculer manuellement les pointeurs dans le tableau principal; tout ce que vous avez à faire est de définir
arrp
au même emplacement quearr
et laissez les règles de l'arithmétique des pointeurs faire tout le travail.Si les images ne sont pas si grande que cela, vous pouvez simplement mettre en place un VLA (encore une fois, C99 ou plus tard):
mais en pratique ce n'est pas une bonne idée; pile cadres sont généralement assez limitée en taille.
malloc
directement, pas besoin de cast, cela ne dissimule.OriginalL'auteur John Bode
Vous avez besoin d'allouer de la mémoire dynamiquement. Utilisez le double pointeur de la logique.
Ex:
Certainement pas, mais vous pouvez le faire se comporter comme un tableau
Pourquoi utiliser une émulation d'un tableau 2D où vous ne pouvez en utiliser un?
Eh bien, c'est la limitation de la maternelle C. tableau Dynamique de la création ou de l'allocation de la mémoire en général était un défaut majeur en C qui fait s'éloigner les gens. C'est toujours une bonne langue, car il donne de la puissance brute. Cet exemple prouve un peu de bas niveau, les manipulations que vous pouvez faire pour atteindre les résultats souhaités..
Mais encore, vous n'avez pas répondu à ma question. C a alloué dynamiquement des tableaux multidimensionnels. Pourquoi dans le monde que vous émuler une fonctionnalité que la langue?
OriginalL'auteur Akshaya Shanbhogue