Hi all,
I have this error when running my program, and when i run it in Terminal, it's "Segmentation fault", so i guess that there 're some error happened when allocating memory.
here is my program
All function work well except "mulDeuxTab" (when i debug, there's an error at ligne :
*(*(tabTempt+j)+i+j)=multi(*(tab1+i),*(tab2+j),cpt);
And I really don't see what could be wrong here
Would you please help me ? Thanks in advance
I have this error when running my program, and when i run it in Terminal, it's "Segmentation fault", so i guess that there 're some error happened when allocating memory.
here is my program
Code:
#include <iostream>
#include <cstdlib>
using namespace std;
typedef int* tabnum[1000];
void nombre2tableau (int nombre, int* tableau, int &taille){
int i=0;
while (nombre > 0){
*(tableau + i)=(nombre % 10);
nombre=nombre/10;
i++;
}
taille=i;
}
int tableau2nombre (int* tab, int taille){
int nombre=0;
for(int i=taille-1;i>=0;i--){
nombre=nombre*10+ *(tab+i);
}
return nombre;
}
int add(int m,int n,int &cpt){
int result;
if(m+n+cpt >= 10){
result=(m+n+cpt)%10;
cpt=1;
}
else {
result=m+n+cpt;
cpt=0;
}
return result;
}
int subtract(int m,int n,int &cpt){
int result;
if(m<(n+cpt)) {
result=m+10-n-cpt;
cpt=1;
}
else{
result=m-n-cpt;
cpt=0;
}
return result;
}
int multi(int m,int n,int &cpt){
int result;
result=(m*n+cpt)%10;
cpt=(m*n+cpt)/10;
return result;
}
void addDeuxTab (int* tab1,int taille1,int* tab2,int taille2,int* tab,int &taille){
int min;
int indice=2;
int cpt=0;
if(taille1>taille2) {
taille=taille1;
indice=1;
}
else taille=taille2;
min=taille1+taille2-taille;
for(int i=0;i<taille;i++){
if(i<min) {
*(tab+i)=add(*(tab1+i),*(tab2+i),cpt);
}
else if(indice==1) *(tab+i)=add(*(tab1+i),0,cpt);
else *(tab+i)=add(*(tab2+i),0,cpt);
}
if(cpt==1){
taille++;
*(tab+taille-1)=cpt;
}
}
void sousDeuxTab(int* tab1,int taille1,int* tab2,int taille2,int* tab,int &taille){
int min;
int indice=2;
int cpt=0;
if (tableau2nombre(tab1,taille1)>tableau2nombre(tab2,taille2)) {
indice=1;
taille=taille1;
}
else taille=taille2;
min=taille1+taille2-taille;
for(int i=0;i<taille;i++){
if(indice==1){
if(i<min) {
*(tab+i)=subtract(*(tab1+i),*(tab2+i),cpt);
}
else *(tab+i)=subtract(*(tab1+i),0,cpt);
}
else{
if(i<min) {
*(tab+i)=subtract(*(tab2+i),*(tab1+i),cpt);
}
else *(tab+i)=subtract(*(tab2+i),0,cpt);
}
}
if(indice==2) *(tab+taille-1)=-*(tab+taille-1);
}
void mulDeuxTab(int* tab1,int taille1,int* tab2,int taille2,int* tab,int &taille){
int **tabTempt=new int* [1000];
*tabTempt=new int [1000];
int* tailleTab=new int[1000];
int cpt=0;
for(int j=0;j<taille2;j++){
for(int i=0;i<taille1;i++){
*(*(tabTempt+j)+i+j)=multi(*(tab1+i),*(tab2+j),cpt);
}
for(int k=0;k<j;k++){
*(*(tabTempt+j)+k)=0;
}
if (cpt>0) {
*(*(tabTempt+j)+taille1+j)=cpt;
*(tailleTab+j)=taille1+1+j;
}
else *(tailleTab+j)=taille1+j;
}
addDeuxTab(*(tabTempt),*(tailleTab),*(tabTempt+1),*(tailleTab+1),tab,taille);
for(int j=2;j<taille2;j++){
addDeuxTab(*(tabTempt+j),*(tailleTab+j),tab,taille,tab,taille);
}
delete tabTempt;
delete tailleTab;
}
void saisirTab (int* tab, int taille){
for(int i=0;i<taille;i++){
cout<<"tableau["<<i<<"] = ";
cin>>*(tab+i);
}
}
void afficher (int* tableau, int taille){
for(int i=0;i<taille;i++){
cout<<*(tableau+i)<<" ";
}
cout<<endl;
}
int main(){
int nombre, taille, taille1, taille2;
int* tableau=new int[1000];
int* tab1=new int[1000];
int* tab2=new int[1000];
//question 1
/*
cout<<"Saisir un nombre :";
cin>>nombre;
nombre2tableau(nombre,tableau,taille);
cout<<"La tableau :"<<endl;
afficher (tableau, taille);
*/
//question 2
/*
cout<<"Saisir la taille d'une tableau : ";
cin>>taille;
cout<<"Saisir une tableau :"<<endl;
saisirTab(tableau,taille);
cout<<"Nombre obtenu : "<<tableau2nombre(tableau,taille)<<endl;
*/
//question 3
/*
cout<<"Saisir la taille de premiere tableau : ";
cin>>taille1;
cout<<"Saisir la premiere tableau :"<<endl;
saisirTab(tab1,taille1);
cout<<"Saisir la taille de second tableau : ";
cin>>taille2;
cout<<"Saisir la second tableau :"<<endl;
saisirTab(tab2,taille2);
addDeuxTab(tab1,taille1,tab2,taille2,tableau,taille);
cout<<"La tableau obtenue :"<<endl;
afficher(tableau,taille);
*/
//question 4
/*
cout<<"Saisir la taille de premiere tableau : ";
cin>>taille1;
cout<<"Saisir la premiere tableau :"<<endl;
saisirTab(tab1,taille1);
cout<<"Saisir la taille de second tableau : ";
cin>>taille2;
cout<<"Saisir la second tableau :"<<endl;
saisirTab(tab2,taille2);
sousDeuxTab(tab1,taille1,tab2,taille2,tableau,taille);
cout<<"La tableau obtenue :"<<endl;
afficher(tableau,taille);
*/
//question 5
cout<<"Saisir la taille de premiere tableau : ";
cin>>taille1;
cout<<"Saisir la premiere tableau :"<<endl;
saisirTab(tab1,taille1);
cout<<"Saisir la taille de second tableau : ";
cin>>taille2;
cout<<"Saisir la second tableau :"<<endl;
saisirTab(tab2,taille2);
mulDeuxTab(tab1,taille1,tab2,taille2,tableau,taille);
cout<<"La tableau obtenue :"<<endl;
afficher(tableau,taille);
delete tab1;
delete tab2;
delete tableau;
return 0;
}
All function work well except "mulDeuxTab" (when i debug, there's an error at ligne :
*(*(tabTempt+j)+i+j)=multi(*(tab1+i),*(tab2+j),cpt);
And I really don't see what could be wrong here
Would you please help me ? Thanks in advance