Bonjour,

Je developpe beaucoup en Java et je suis actuellement des cours de C++

Je travaille sur des exercices et là il y en a un sur lequel je bute.

Le voici : je dispose d'une classe F qui a pour attributs un tableau et sa taille.
Son constructeur est vide mais un setter petmet d'initialiser (et changer) le tableau et sa taille.
La classe dispose aussi d'une methode affichant les valeurs du tableau sur la console

Le but de l'exo et d'utiliser un tableau (et non un vector) et de résoudre le problème du cas où on supprimerait le tableau avant d'appeler la méthode print()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
#include <iostream>
#include "f.h"
 
using namespace std;
 
F::F()
{
}
F::~F()
{
    delete[] tab;
}
 
void F::setTab( int *_tab, int _tabLength)
{
    tab=_tab;
    tabLength=_tabLength;
}
 
void F::print()
{
    int i=0;
    for(i=0;i<tabLength;i++)
        cout<<"TAB["<<i<<"]="<<tab[i]<<endl;
}
je n'ai pas mis le header qui contient simplement les signature des fonctions ainsi que le tableau et sa taille en attribut.

Le problème est que si dans le main on fait ceci dans le main:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
F* f = new F();
 
    int * tab= new int[10];
    int length=0;
    tab[length++]=20;
    tab[length++]=15;
    tab[length++]=10;
    tab[length++]=20;
 
 
 
    f->setTab(tab,length);
    delete[] tab;
    f->print();
ça plante ce qui est normal.

Je dois modifier le code en utilisant nottament un ou des "const" pour ne plus qu'il soit possible d'avoir ce problème.

Avez vous une idée ?

Merci beaucoup