- C e ponteiros
+ Responder ao Tópico
-
C e ponteiros
Pessoal,
Estou fazendo um programa em C++ para solucionar problemas utilizando o metodo simplex.
E estou tendo uma dificuldade com os ponteiros...rs tenho um ponteiro de ponteiro A (matriz) e um ponteiro B (vetor)
Quando altero o valor de B esta alterando alguns valores de A.
Abaixo segue o meu fonte, alguém sabe onde estou errando?
Obrigado,
Marcelo Gomes
-----------
#include <conio.h>
#include <alloc.h>
#include <iostream.h>
class poo{
private:
int li,co;
float *x, *c, *x0, *c0 ,*b, **a;
public:
poo(int l, int c);
void recebedados();
};
void main(){
poo *p;
clrscr();
p=new poo(2,4);
p->recebedados();
getch();
}
poo:oo(int l, int c){
int m;
this->li=l;
this->co=c;
this->x= (float *) malloc(sizeof(float *) * co);
this->c= (float *) malloc(sizeof(float *) * co);
this->x0=(float *) malloc(sizeof(float *) * li);
this->c0=(float *) malloc(sizeof(float *) * li);
this->b= (float *) malloc(sizeof(float *) * li);
this->a= (float **) malloc(sizeof(float *) * li);
for(m=0;m<li;m++)
a[m]=(float *) malloc(sizeof(float) * co);
}
void poo::recebedados(){
int m,n;
cout << "\nEntre com o valor de x0";
for(m=0;m<li;m++){
cout << "\nEntre com o valor de X0 na posicao " << m;
cin >> x0[m];
}
cout << "\nEntre com o valor de c0";
for(m=0;m<li;m++){
cout << "\nEntre com o valor de c0 na posicao " << m;
cin >> c0[m];
}
for(m=0;m<li;m++){
cout << "\nEntre com o valor de b na posicao " << m;
cin >> b[m];
}
for(m=0;m<co;m++){
cout << "\nEntre com o valor de X na posicao " << m;
cin >> x[m];
}
for(m=0;m<co;m++){
cout << "\nEntre com o valor de C na posicao " << m;
cin >> c[m];
}
for(m=0;m<li;m++){
for(n=0;n<co;n++){
cout << "\nEntre com o valor de a na posicao " << m << "x" << n;
cin >> a[m][n];
}
}
}
-
C e ponteiros
ola,
Seu codigo eh pra ser compilado no TurboC++, nao? Vi pelo conio.h declarado e pelo seu post feito depois deste.
Bem... vc esta alocando varias matrizes de ponteiros e nao float´s.
Vc deve declarar matrix de ponteiro apenas pra variavel a.
(sizeof(float *) para sizeof(float) para c, c0,x, x0 e b)
Essa modificacao TALVEZ nao resolva seu problema (uma vez q ponteiro PROVAVELMENTE tem o mesmo tamaho do float na sua maquina), nas tente (nao duvido q comece a fucnionar).
Nao vi problemas graves no seu codigo (nao compilei) E tb desconfio
MUITO do TurboC. Jah pastei muito com ele. Teste seu programa no gcc (remova o conio.h e use getchar() ou invez de getch() (ou use com ncurses(3))).
Sempre faça um memset(var, 0, size_var) nas variaveis dinamicas alocadas (ou calloc()): ha erro em alguns compiladores em pegar um endereco de uma variavel declarada mas nao inicializada.
(outra coisa, use as tags {code} {/code} para postar codigo. Assim nao perde a identacao)
Já q vc tah usando C++ e nao C, pq nao usa um conteiner (list, vector, sei la) de <float> em vez de alocar e gerenciar memoria dinamica??
-
C e ponteiros
Eh o meu prog foi feito em TurboC, estou iniciando o uso do gcc, mas tive algumas dificudades,(que já postei no forum!!! ) e foram respondidas... ainda vou testar.
Vou tentar fazer as modificações sugeridas, depois eu posto o que aconteceu...
Obrigado, pela dica do post no forum...nos próximos vou usar...
Bom eu não usei esses caras pq eu não os conhecia... eu comecei aprendendo C na faculdade e aos poucos estou aprendendo C++, ainda estou misturando tudo C e C++...rs
Obrigado,
Marcelo Gomes