Allocation dynamique d'un tableau à 2 dimensions - C - Programmation
Marsh Posté le 02-06-2004 à 18:24:29
tu doit faire ca (je pense, et j'espere que je pense bien, sinon Taz me corrigera ):
Code :
|
Marsh Posté le 02-06-2004 à 18:26:02
pas possible. le compilateur ne connait pas les dimensions comme c'est le cas pour les tableaux
Marsh Posté le 02-06-2004 à 18:53:26
Code :
|
bien sur qu'il connait les Dim....
Marsh Posté le 02-06-2004 à 19:15:50
Code :
|
Marsh Posté le 02-06-2004 à 19:53:31
Merci C'est bon et voila un autre code qui marche. Javais fait un erreur de débutant, j'ai faite une boucle avec for (j = 0; j < n; i = j + 1) soit i à la place de j. Tout fonctionne je suis au anges.
Code :
|
Marsh Posté le 02-06-2004 à 19:56:37
thermocline a écrit :
|
c'est moins lisible que ma solution ca quand meme
Marsh Posté le 02-06-2004 à 20:14:58
Puisque tu n'en parle, j++ est une poste incrémentation et ++j est une pré incrémentation, mais quelle effet a ++j dans une boucle par exemple?
Code :
|
Marsh Posté le 02-06-2004 à 20:16:55
rien ça incrémente j et voilà.
i++; et ++i; seront en C traduit simplement par la même instruction assembleur. il aura un changement avec un contexte comme a = i++; et a = ++i; qui là ne produiront pas le même code
Marsh Posté le 02-06-2004 à 21:02:00
Carol Poulin a écrit : on fait quoi allors? |
Un ptit coup de C99 peut-être ?
Code :
|
Et là t'as un magnifique tableau prêt à l'emploi (cool le C99 hein ?)
Marsh Posté le 02-06-2004 à 22:56:48
ca marche...mais ton programme fuit!
le "free(tab)" ne libere pas toute la memoire de ton tableau(**tab)!!
comme tu boucles pour faire le malloc..boucle pour faire le free
Marsh Posté le 02-06-2004 à 23:01:29
leneuf22 a écrit : Un ptit coup de C99 peut-être ?
|
Mouais, mais pourquoi pas int tab [k][n] ?
Le malloc, faites-en ce que voulez, mais là, franchement, c'est pas utile.
Marsh Posté le 02-06-2004 à 23:31:12
vivelec a écrit : Mouais, mais pourquoi pas int tab [k][n] ? |
t'as eu des problèmes avec malloc dans ta jeunesse ?
tu veut qu'onen parle ?
Marsh Posté le 02-06-2004 à 23:42:30
Joel F a écrit : t'as eu des problèmes avec malloc dans ta jeunesse ? |
Moi, je veux bien qu'on en parle ... mais, malloc() est comme tout appel système : il doit être justifié.
Marsh Posté le 02-06-2004 à 23:43:45
vivelec a écrit : Moi, je veux bien qu'on en parle ... mais, malloc() est comme tout appel système : il doit être justifié. |
est-ce que au moins, tu te rends compte de l'absurdité de tes propos ???
tu sais que depuis 1990 malloc est beaucoup plus safe hmm ??
Marsh Posté le 02-06-2004 à 23:59:21
Joel F a écrit : est-ce que au moins, tu te rends compte de l'absurdité de tes propos ??? |
Oui justement, je te retourne la pareille.
Je te rapelle que AIX/SOLARIS/HP-UX/TRU64 n'ont pas le même noyeau.
Sinon cela ferait longtemps que les codes seraient portables sans cross-compilos.
Marsh Posté le 03-06-2004 à 00:03:25
m'enfin bordel, le malloc ca fait lurette qu'ile st standardisé sur toutes plateformes.
Marsh Posté le 03-06-2004 à 00:05:20
Joel F a écrit : m'enfin bordel, le malloc ca fait lurette qu'ile st standardisé sur toutes plateformes. |
Non justement.
Pour chaque Os, tu trouveras des limitations distinctes et des contre-indications persuasives.
Sinon, tous les codes seraient réentrants.
Marsh Posté le 03-06-2004 à 00:05:58
vivelec a écrit : Oui justement, je te retourne la pareille. |
c'est quoi ce flan?
le C est un standard depuis longtemps (le fameux ansi C n'est ce pas ), et le malloc fait partie du lot
Marsh Posté le 03-06-2004 à 00:10:15
vivelec a écrit : Non justement. |
n'importe quoi.
La réentrance d'appels concurrents à malloc n'est pas garantie par la norme, cela dit rien ne t'empeche de lire la doc de tes compilos pour utiliser des options du genre "-mt" pour éviter tout problème de plantage "aléatoire" dans un appel à malloc.
Marsh Posté le 03-06-2004 à 00:16:57
leneuf22 a écrit : Un ptit coup de C99 peut-être ?
|
comme tu dis l'ami, cela étant, faudra pas trop bourer la pile si n est grand.
Marsh Posté le 03-06-2004 à 00:33:31
schnapsmann a écrit : c'est quoi ce flan? |
C'est quoi ce bordel ?
Encore un bizut d'universitaire ?
Sortez de votre linux, bordel !
Marsh Posté le 03-06-2004 à 00:34:30
Taz a écrit : comme tu dis l'ami, cela étant, faudra pas trop bourer la pile si n est grand. |
Quelle est le rapport entre le malloc et la pile ?
Tu deviens à ton tour rétrograde ?
Marsh Posté le 03-06-2004 à 00:36:18
vivelec a écrit : Quelle est le rapport entre le malloc et la pile ? |
tu ne connais pas les "nouveautés" du c99 n'est ce pas?
Marsh Posté le 03-06-2004 à 00:36:41
vivelec a écrit : C'est quoi ce bordel ? |
le C a été standardisé en 1983. bien essayé
vivelec a écrit : Quelle est le rapport entre le malloc et la pile ? |
int * tab[N] ça te parait pas être sur la pile ?
Marsh Posté le 03-06-2004 à 01:01:17
vivelec a écrit : Mouais, mais pourquoi pas int tab [k][n] ? |
Parce que sauf erreur, le compilo te jette immédiatement. Cette déclaration n'est valable que pour les tableaux statiques.
Je ne sais pas si dans l'exemple donné, n et k sont donnés à titre d'exemple, ou si c'est réellement la taille du tableau dans le programme final, auquel cas, c'est effectivement bcp plus simple de faire un
#define k 2
#define n 3
int tab[k][n];
Marsh Posté le 03-06-2004 à 01:15:28
el muchacho a écrit : Parce que sauf erreur, le compilo te jette immédiatement. Cette déclaration n'est valable que pour les tableaux statiques. |
Oui, enfin, disons que l'idée reste la même.
Si tu connais k et n tu n'as pas besoins malloc()
Marsh Posté le 03-06-2004 à 01:16:54
vivelec a écrit : Si tu connais k et n à la compilation tu n'as pas besoins malloc() |
ça dépend de n*k*sizeof(T)
Marsh Posté le 03-06-2004 à 01:18:13
Taz a écrit : le C a été standardisé en 1983. bien essayé |
Tout dépend de quelle pile on parle et si l'on est en multi-thread ou non.
Dans ce dernier cas, et hormis tout appel explicite, la taille max est généralement de 64 K. Mais c'est un autre sujet.
Marsh Posté le 03-06-2004 à 01:24:41
vivelec a écrit : Oui, enfin, disons que l'idée reste la même. |
Correction : si tu connais k et n à la compilation, tu n'as pas besoin de malloc(). Sinon, tu n'as pas le choix.
Sur ce, bonne nuit à tous !
Marsh Posté le 03-06-2004 à 01:26:32
el muchacho a écrit : Correction : si tu connais k et n à la compilation, tu n'as pas besoin de malloc(). Sinon, tu n'as pas le choix. |
Exactement.
Ma remarque porte uniquement sur les allocations dont ont connaît l'espace avent la compilation.
Marsh Posté le 03-06-2004 à 01:27:51
et ? dans tous les cas, limitation ou pas, ça reste une pile
Marsh Posté le 03-06-2004 à 01:28:08
vivelec a écrit : Exactement. |
t'es donc complètement hors-sujet
Marsh Posté le 03-06-2004 à 01:28:15
vivelec a écrit : Exactement. |
En français :
Si l'on connaît n et k avant la compilation, on n'a pas besoin de malloc().
Marsh Posté le 03-06-2004 à 01:30:05
et voilà ... et après, on se retrouve avec des débutants qui sortent des
Code :
|
Marsh Posté le 02-06-2004 à 18:12:15
Je veut allouer dynamiquement avec un malloc () un tableau de k ligne et n colonne. Par la suite, je veux l'initialiser. Je ne sais pas si j'ai le droit de faire ça mais je n'ai pas d'erreur à la compilation. Cependant à l'exécution un erreur de violation d'accès. Alors comment allouer dynamiquement avec un malloc ce tableau à 2 dimensions?
voici mon code: