Me compila perfectamente, y he hecho un programita main muy sencillo y tambien compila. Pero a la hora de ejecutarlo da un error de windows. Eso puede ser por que la logica este mal? me puedes echar una mano en la logica?. Salu2
int main(){ char c; int i,n,m; int* a; int* b; int* r; a[0]=2; a[1]=3; a[2]=2; a[3]=5; a[0]=3; a[1]=1; a[2]=7; a[3]=2; n=3; m=3; r=MultiPoli(a,n,b,m); for(i=0;i<10;i++){ printf("%i",r); } c=getche(); return 0;}
Esque yo lo que quiero hacer es un vector, que apriori no se los elementos que tiene. Cada Vector representara los elementos.Como hago esto entonces?
Cuando exactamente tengo que reservar la memoria?
#include <stdio.h>int* MultiPoli(int* p, int n, int* q, int m);int main(){ char c; int i,n,m; int* a; int* b; int* r; a[0]=2; a[1]=3; a[2]=2; a[3]=5; a[0]=3; a[1]=1; a[2]=7; a[3]=2; n=3; m=3; r=MultiPoli(a,n,b,m); for(i=0;i<10;i++){ printf("%i",r); } c=getche(); return 0;}//Multiplicacion de polinomios con divide y vencerasint* MultiPoli(int* p, int n, int* q, int m){ int* P; int* Pi; int* Pd; int* Q; int* Qi; int* Qd; int* Ri; int* Rd; int* Rh; int* Sp; int* Sq; int* f; int* g; int* h; int* j; int* X; int x=0; int y=0; int i,N,M; if(n>m){ //El vector mas grande es P P=p; Q=q; N=n+1; M=m+1; } else{ Q=p; P=q; N=m+1; M=n+1; } //Reservo Memoria P=(int*)malloc((sizeof(int))*(N)); Q=(int*)malloc((sizeof(int))*(M)); Pi=(int*)malloc((sizeof(int))*(N/2)); Pd=(int*)malloc((sizeof(int))*(N/2)); Qi=(int*)malloc((sizeof(int))*(M/2)); Qd=(int*)malloc((sizeof(int))*(M/2)); Ri=(int*)malloc((sizeof(int))*(N)); Rd=(int*)malloc((sizeof(int))*(N)); Rh=(int*)malloc((sizeof(int))*(N)); Sp=(int*)malloc((sizeof(int))*(N/2)); Sq=(int*)malloc((sizeof(int))*(N/2)); f=(int*)malloc((sizeof(int))*(N/2)); g=(int*)malloc((sizeof(int))*(N)); h=(int*)malloc((sizeof(int))*(N*N)); j=(int*)malloc((sizeof(int))*(N*N)); if(M==1){ //Multiplicación Convencional. Caso Base X[0]=P[0]*Q[0]; return X; } else{ for(i=0;i<(N/2)-1;i++){ //Parte Izquierda de P Pi=P; } for(i=N/2;i<N;i++){ //Parte Derecha de P Pd=P; } for(i=0;i<(M/2)-1;i++){ //Parte Izquierda de Q Qi=Q; } for(i=M/2;i<M;i++){ //Parte Derecha de Q Qd=P; } Ri=MultiPoli(Pi,N/2,Qi,M/2); //Llamada recursiva Rd=MultiPoli(Pd,N/2,Qd,M/2); //Llamada recursiva for(i=0;i<(N/2)-1;i++){ // Pi+Pd Sp=Pi+Pd; } for(i=0;i<(M/2)-1;i++){ // Qi+Qd Sq=Qi+Qd; } Rh=MultiPoli(Sp,N/2,Sq,M/2); //Llamada recursiva for (i=0;i<(N/2)-1;i++){ // Rh+Ri+Rd f=Rh-Ri-Rd; } for (i=0;i<(N/2)-1;i++){ // 1.-(Rh+Ri+Rd)*Xn/2 g=0; } for (i=N/2;i<N;i++){ // 2.-(Rh+Ri+Rd)*Xn/2 g=f; x++; } for (i=0;i<N-1;i++){ // 1.-Rd*Xn h=0; } for (i=N;i<2*N;i++){ // 2.-Rd*Xn h=Rd[y]; y++; } for(i=0;i<2*N;i++){ // Calculo la solucion j=Ri+g+h; } return j; }//Fin else //Libero Memoria free(P); free(Pi); free(Pd); free(Q); free(Qi); free(Qd); free(Ri); free(Rd); free(Rh); free(Sp); free(Sq); free(f); free(g); free(h); free(j); }//Fin metodo
Ah, si lo que vas a devolver es memoria reservada dentro de MultiPoli y queres acceder (como veo tu bucle con printf) desde main entonces no podes liberarla en MultiPoli sino que tenes que hacerlo en main.
A ver si te he entendido. Como hay return j; y return X;, quieres decir que free(j);; y free(X); deben de estar en el main, asi tal cual, no?En cuando a mi metodo main, es cierto que solo inicializaba a (se me olvidó cambiarlo al copiar-pegar).