encore les allocations de mémoire - C - Programmation
Marsh Posté le 16-03-2005 à 16:23:18
Ca pourrait etre (selon les problemes, il y a des solutions plus ou moins adaptées)
1) Tu alloues un tableau de M pointeur
2) Tu alloues a chacun des M pointeurs un tableau de N (variable) données.
3) tu cesses de creer tout un tas de topics redondants et tu poste dans le meme sinon les seront tes amis...
A+,
Marsh Posté le 16-03-2005 à 17:45:20
Ou sinon :
http://forum.hardware.fr/forum2.ph [...] 853&cat=10
Enfin faut avoir un compilo qui supporte bien cette méthode, et c'est pas assuré
Marsh Posté le 17-03-2005 à 02:24:59
cassiopee75 a écrit : oui pardon pour les topics |
Tu dis "M connu" donc je présume qu'il est fixé à l'avance.
Tu dis pas de quoi est fait ton tableau alors je vais dire "float" pour l'exemple
Exemple pour M=10
Code :
|
L'utilisation d'un "#define" est recommandée ici à la place de "10". Comme ça, si "M" change, tu changes le #define et tu recompiles. Certains préfèrent le "const". C'est au choix.
Marsh Posté le 17-03-2005 à 06:48:33
Heyo.
Le tableau n'est pas dynamic.
Voici ce que je ferai.
Code :
|
++
Marsh Posté le 17-03-2005 à 08:00:15
plofplof a écrit :
|
Pourquoi ce cast bizarre ? Mieux vaut ne rien mettre que mettre un cast faux...
|
Et ce que tu proposes est un tableau à une dimension, pas à 2 dimensions...
En ce qui concerne l'accès, je me contenterais de
|
en effet, ptr étant de type float,
ptr += sizeof(float); |
ne fait pas ce que tu crois. Les propriétes de l'arithmétique des pointeurs permettent
ptr += 1; |
ou
ptr++; |
Marsh Posté le 17-03-2005 à 10:56:16
Citation : |
Pkoi ? As-tu deja compiler en -Wall ?
Ce cast est necessaire pour que le compilo ne crize po.
¥Ô¥
Marsh Posté le 17-03-2005 à 11:24:05
plofplof a écrit :
|
Ton compilateur est nul alors
on ne cast jamais la sortie d'un malloc
Marsh Posté le 17-03-2005 à 12:38:55
Bonjour
Citation : Pkoi ? As-tu deja compiler en -Wall ? :) |
Quelle est la source de cette interdiction ?
j'utilise gcc sans -wall et le cast de sortie de malloc pour ne pas avoir de série de clignotants (warning)
le cast sur pointeur ne sert de toute façon qu'à passer outre les contrôles de type.
Cordialement
Marsh Posté le 17-03-2005 à 13:22:44
plofplof a écrit :
|
Oui!
Citation : Ce cast est necessaire pour que le compilo ne crize po. |
J'ai pas ce problème. Il suffit de fournir le bon prototype en incluant <stdlib.h>. En C, la conversion void* <-> T* est implicite dans les deux sens. Ce n'est pas forcément vrai dans d'autres langages...
Marsh Posté le 17-03-2005 à 13:25:44
db__ a écrit : Bonjour
|
Je ne pense pas qu'il y ait d'interdiction. Le consensus est plutôt de dire que le cast est inutile (voir les FAQ de clc et de fclc). Personnellement, je ne met pas de cast.
Citation : |
Il n'y a pas de contrôle avec void* en C.
Montre moi un exemple de code qui fait des warnings.
Marsh Posté le 17-03-2005 à 20:06:10
db__ a écrit : Bonjour
|
Tu as des warnings parce que tu n'as pas inclu stdlib.h. Le compilo suppose donc que malloc, comme n'importe quelle fonction non declaree, renvoit un int. Mettre un cast pour virer le warning n'est evidemment pas la bonne solution.
Cordialement.
Marsh Posté le 17-03-2005 à 22:49:46
plofplof a écrit : Le tableau n'est pas dynamic. |
Cassiopée demande un tableau avec "M" connu donc on peut utiliser un tableau statique
plofplof a écrit : Voici ce que je ferai.
|
tu déclares un ptr en "float *" et tu lui donnes un "float **"
plofplof a écrit :
|
Si tu as deux indices reliés entre eux par un lien logique, tu peux les faire progresser tous deux en même temps dans le "for". encore faut-il savoir décaler les pointeurs... (ptr++ fonctionne puiqu'il pointe sur un "float", le C converti tout seul en "ptr+=sizeof(float)" )
for(i=0, ptr=tab; i<tab_size; i++, ptr++) |
Mais ton post ne répond pas au problème initial qui était d'allouer une matrice. Toi, tu alloues (mal) un simple tableau à une dimension
Marsh Posté le 17-03-2005 à 22:51:58
db__ a écrit : |
(en C oui, je me permets de signaler qu'en c++ non, a tout hasard)
Marsh Posté le 16-03-2005 à 16:13:58
bon, celle là, c'est la dernier question promis!!
alors, j'ai en fait un tableau NxM avec M connu mais N variable. Dans ce cas là, comment je fais pour l'allocation mémoire? Quelle est la syntaxe avec malloc?