CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

bugathon

sn00bino
sn00bino
Niveau 5
09 décembre 2007 à 16:27:05

Comment sa se fait que cette ligne puisse provoquer un bug ? :
if( m != NULL )delete[] m;
m étant un pointeur sur un tableau déclaré comme suit :
m = new float[x];

kufa
kufa
Niveau 9
09 décembre 2007 à 16:33:06

facile, en voulant desalouer une addresse non allouee:

float *f = new float[size];
if( m != NULL ) delete[] m;
if( m != NULL ) delete[] m;

sn00bino
sn00bino
Niveau 5
09 décembre 2007 à 16:49:12

if( m != NULL ){delete[] m; m = NULL; }
c ´est sa qu´ il faut faire donc ?
je pensais que delete le faisait automatiquement. merci kufa.

godrik
godrik
Niveau 30
09 décembre 2007 à 21:51:48

En effet, delete ne le fait pas automatiquement.

sn00bino
sn00bino
Niveau 5
11 décembre 2007 à 18:51:57

reyo,

j´ ai un constructo par recopie définis par :
m(m&);

un opérateur + definis par :
m m::operator +::m(m1)
{
...
return m2;
}

dans le main :
m a;
m b;
m c;
c = a + b; // bug ici ->
no matching function for call to `m::m(m)´
note candidates are: m::m(m&)

le probléme c ´est que définir un constructo m::m(m) c ´est impossible.

Comment me sortir de la ?

++

godrik
godrik
Niveau 30
11 décembre 2007 à 21:03:03

m m::operator +::m(m1)

ceci pose probleme je pense.
Tu devrais prendre en parametre une reference constante sur m ou un pointeur.

sn00bino
sn00bino
Niveau 5
12 décembre 2007 à 12:31:36

en quoi sa pose probléme ? ( j´ ai testé sa change rien )

godrik
godrik
Niveau 30
12 décembre 2007 à 13:28:59

C´est un probleme de performance.
si tu prends un m en parametre, il va falloir construire cette objet et il sera détruit a la fin de la fonction operateur+. Tu fais donc une construction/destruction pour rien.

En effet, ca ne doit pas changer ton probleme de compilation.

Ton probleme dans le détail, je ne le vois pas bien. Pourrais tu fournir un code qui pose le probleme ?

sn00bino
sn00bino
Niveau 5
13 décembre 2007 à 18:34:56

http://rafb.net/p/UBSANJ53.html

godrik
godrik
Niveau 30
13 décembre 2007 à 19:45:40

hehe!!
un constructeur par recopie doit prendre un parametre constant.
De meme pour les operateurs.

LGV
LGV
Niveau 28
15 décembre 2007 à 11:50:56

c´est une recommandation, mais pas une obligation; on peut definir des operateurs qui prennent en param des refs/non-refs/consts/non-consts : c´est au programmeur de s´assurer que les interfaces sont coherentes et robustes pour l´utilisateur. La seule vraie limitation etant un ctor de copie qui doit prendre une ref en param, sans quoi c´est le stack overflow assure.

sn00bino
sn00bino
Niveau 5
15 décembre 2007 à 19:19:59

sa ne marche toujours pas, même avec le const. Mais enfin j´ ai des problémes plus embêtants :

m *pmnms = new m[a](x,y);

ISO forbids initialization in array new

Sa veut dire qu´ on peut pas déclarer un tableau d´ objet dynamiques ?
( note j´ ai aussi essayé :
m *pmnms = NULL;
pmnms = new m[a](x,y); )

godrik
godrik
Niveau 30
15 décembre 2007 à 22:15:10

en effet, les tableau d´objet sont crée par le constructeur par défaut

sn00bino
sn00bino
Niveau 5
15 décembre 2007 à 22:32:39

je suis scandalisé

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment