• Jueves 14 de Noviembre de 2024, 22:38

Autor Tema:  Porque No Compila Esto En C?  (Leído 4361 veces)

manurodri189

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Porque No Compila Esto En C?
« en: Jueves 8 de Marzo de 2007, 11:08 »
0
Buenas, se supone que tengo que hacer un algoritmo divide y venceras que multiplique dos polinomios de grado n, lo he hecho yo, por tanto no se si la semantica estara bien. El caso esque no me compila, y esque soy nuevo porgramando en C y lo tengo muy verde. Aqui os dejo el codigo a ver si le podeis echar un vistazo.

Código: Text
  1. //Multiplicacion de polinomios con divide y venceras
  2.  
  3. int* MultiPoli(int* p, int n, int* q, int m);
  4.  
  5.  
  6. int* MultiPoli(int* p, int n, int* q, int m){
  7.      int* P;
  8.      int* Pi;
  9.      int* Pd;
  10.      int* Q;
  11.      int* Qi;
  12.      int* Qd;
  13.      int* Ri;
  14.      int* Rd;
  15.      int* Rh;
  16.      int* Sp;
  17.      int* Sq;
  18.      int* f;
  19.      int* g;
  20.      int* h;
  21.      int* j;
  22.      int x=0;
  23.      int y=0;
  24.      int i,N,M;
  25.      
  26.      if(n>m){ //El vector mas grande es P
  27.             P=p;
  28.             Q=q;
  29.             N=n+1;
  30.             M=m+1;
  31.             }
  32.      else{
  33.           Q=p;
  34.           P=q;
  35.           N=m+1;
  36.           M=n+1;
  37.           }
  38.      
  39.      if(M==1){ //Multiplicación Convencional. Caso Base
  40.           return (P[0]*Q[0]);
  41.           }
  42.      else{
  43.           for(i=0;i<(N/2)-1;i++){ //Parte Izquierda de P
  44.                Pi[i]=P[i];
  45.                }
  46.           for(i=N/2;i<N;i++){ //Parte Derecha de P
  47.                Pd[i]=P[i];
  48.                }
  49.           for(i=0;i<(M/2)-1;i++){ //Parte Izquierda de Q
  50.                Qi[i]=Q[i];
  51.                }
  52.           for(i=M/2;i<M;i++){ //Parte Derecha de Q
  53.                Qd[i]=P[i];
  54.                }
  55.           Ri=MultiPoli(Pi,N/2,Qi,M/2); //Llamada recursiva
  56.           Rd=MultiPoli(Pd,N/2,Qd,M/2); //Llamada recursiva
  57.            
  58.           for(i=0;i<(N/2)-1;i++){ // Pi+Pd
  59.                Sp[i]=Pi[i]+Pd[i];
  60.                }
  61.           for(i=0;i<(M/2)-1;i++){ // Qi+Qd
  62.                Sq[i]=Qi[i]+Qd[i];
  63.                }
  64.           Rh=MultiPoli(Sp,N/2,Sq,M/2); //Llamada recursiva
  65.          
  66.           for (i=0;i<(N/2)-1;i++){ // Rh+Ri+Rd
  67.               f[i]=Rh[i]-Ri[i]-Rd[i];
  68.               }
  69.           for (i=0;i<(N/2)-1;i++){ // 1.-(Rh+Ri+Rd)*Xn/2
  70.               g[i]=0;
  71.               }
  72.           for (i=N/2;i<N;i++){ // 2.-(Rh+Ri+Rd)*Xn/2
  73.               g[N/2]=f[x];
  74.               x++;
  75.               }
  76.           for (i=0;i<N-1;i++){ // 1.-Rd*Xn
  77.               h[i]=0;
  78.               }
  79.           for (i=N;i<2N;i++){ // 2.-Rd*Xn
  80.               h[N]=Rd[y];
  81.               y++;
  82.               }
  83.              
  84.           for(i=0;i<2N;i++){ // Calculo la solucion
  85.               j[i]=Ri[i]+g[i]+h[i];
  86.               }
  87.              
  88.           return j;
  89.          
  90.      }//Fin else
  91. }//Fin metodo
  92.  

Gracias y Salu2



Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #1 en: Jueves 8 de Marzo de 2007, 11:12 »
0
Siempre es mas facil si nos pones tambien los errores que da el compilador. Basicamente veo dos cosas:

return (P[0]*Q[0]);

Como dice el VC++ al respecto:
(40) : error C2440: 'return' : cannot convert from 'int' to 'int *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast

Tu funcion devuelve int * y no int.

Y despues estas usando 2N, me imagino que querras poner 2 * N.

Lo mismo que te respondi en otro foro  :whistling:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

manurodri189

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #2 en: Jueves 8 de Marzo de 2007, 11:20 »
0
Es verdad tio, estas en todas partes como Dios, jejeje. Gracias tio, corregire eso y vere que tal. Salu2



Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #3 en: Jueves 8 de Marzo de 2007, 11:22 »
0
Suerte y conste que no me fije en la logica del programa, solo en hacerlo compilar  B)

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

manurodri189

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #4 en: Jueves 8 de Marzo de 2007, 11:37 »
0
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



Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #5 en: Jueves 8 de Marzo de 2007, 11:53 »
0
Cita de: "manurodri189"
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
Es lo mas probable, si nos das el main mas sencillo que falle mejor.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #6 en: Jueves 8 de Marzo de 2007, 12:06 »
0
A simple vista hay muchos punteros a los que accedes sin darles ningun valor, osea apuntan a cualquier lado:

(45) : warning C4700: local variable 'Pi' used without having been initialized
(48) : warning C4700: local variable 'Pd' used without having been initialized
(51) : warning C4700: local variable 'Qi' used without having been initialized
(54) : warning C4700: local variable 'Qd' used without having been initialized
(60) : warning C4700: local variable 'Sp' used without having been initialized
(63) : warning C4700: local variable 'Sq' used without having been initialized
(68) : warning C4700: local variable 'f' used without having been initialized
(71) : warning C4700: local variable 'g' used without having been initialized
(78) : warning C4700: local variable 'h' used without having been initialized
(86) : warning C4700: local variable 'j' used without having been initialized

Eso da una excepcion seguro.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

manurodri189

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #7 en: Jueves 8 de Marzo de 2007, 14:21 »
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?

Salu2



manurodri189

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #8 en: Jueves 8 de Marzo de 2007, 14:23 »
0
El main es este, es muy sencillo.

Salu2

Citar
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;
}

Salu2



Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #9 en: Jueves 8 de Marzo de 2007, 14:47 »
0
Cita de: "manurodri189"
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?
Eso esta bien pero da lo mismo en este caso, por ejemplo esta linea (45) no tiene sentido:

Pi=P;

¿Que queres que sea Pi? Si queres hacer una copia de P entonces reserva memoria para Pi antes de usarlo.

Por ejemplo:
Código: Text
  1.  
  2. Pi = (int*)malloc(numeroDeElementos * sizeof(int));
  3.  
  4.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

manurodri189

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #10 en: Jueves 8 de Marzo de 2007, 15:02 »
0
Esque quiero dividir el vector P, en dos vectores el Pi, y el Pd (izquierda y derecha respectivamente). Y lo mismo con Q. Por eso lo de el bucle for que recorre el vector P hasta la mitad, introduzco estos elementos en Pi, eso esta mal echo?

Cuando exactamente tengo que reservar la memoria?

Salu2



Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #11 en: Jueves 8 de Marzo de 2007, 15:08 »
0
Cita de: "manurodri189"
Cuando exactamente tengo que reservar la memoria?
Antes de acceder a la misma  :lol:

Cuando sepas el total de elementos que vas a querer guardar en ese puntero los reservas, eso tiene que ser evidentemente antes de que intentes leer/escribir. Cuando ya no vayas a usarlo mas llamas a free para liberar esa memoria.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

manurodri189

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #12 en: Jueves 8 de Marzo de 2007, 15:44 »
0
El programa sigue haciendo lo mismo, petar. Dejo aqui hasta ahora lo que llevo echo:

Citar
#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 venceras
int* 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

Gracias por todo. Salu2



Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #13 en: Jueves 8 de Marzo de 2007, 15:49 »
0
El main tambien esta mal ... y despues fijate que no tenes que reservar memoria para los parametros que te pasan a la funcion MultiPoli, esos ya existen de antes.

Yo estaba usando un main un poco mas simple:
Código: Text
  1.  
  2. int p[] =
  3. {
  4.     0, 1, 3, 5
  5. };
  6. int q[] =
  7. {
  8.   6,2
  9. };
  10. MultiPoli(p, 4, q, 2);
  11.  
  12.  

Podes usar ese o resevar memoria para a y b (fijate que le estas asignando valores solamente a a y no a b. X sigue estando sin inicializar en MultiPoli.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #14 en: Jueves 8 de Marzo de 2007, 15:52 »
0
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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

manurodri189

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #15 en: Jueves 8 de Marzo de 2007, 16:13 »
0
Cita de: "Eternal Idol"
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).



Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #16 en: Jueves 8 de Marzo de 2007, 16:18 »
0
Cita de: "manurodri189"
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).
j y x no existen en main PERO como le asignas el valor de retorno a r podes liberar r ... eso si, si vas a liberar r tenes que asegurarte que SIEMPRE devolves memoria reservada en MultiPoli.

No solo le dabas valores solo a a sino que le dabas valores a unos punteros invalidos, lo mismo aplica para b, no estan inicializados. Usa memoria dinamica o estatica como el ejemplo que te mostre antes de mi main.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

manurodri189

  • Miembro MUY activo
  • ***
  • Mensajes: 117
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #17 en: Jueves 8 de Marzo de 2007, 17:46 »
0
Ok, tio. He cambiado el main y lo de liberar memoria y todo. Ahora el programa se ejecuta y no hace nada. En el main he hecho que me muestre el vector y que haga una pausa. Pues bien no hace nada, si no que sale directamente del programa. No se que puede pasar.

Código: Text
  1. #include &#60;stdio.h&#62;
  2.  
  3. int* MultiPoli(int* p, int n, int* q, int m);
  4.  
  5. int main(){
  6.     char c;
  7.     int i;
  8.     int* r;
  9.    
  10.     int p[] =
  11.     {
  12.      0, 1, 3, 5
  13.     };
  14.     int q[] =
  15.     {
  16.      6, 2, 3, 4
  17.     };
  18.     r=(int*)malloc((sizeof(int))*(10));
  19.     r=MultiPoli(p, 4, q, 4);
  20.    
  21.     for(i=0;i&#60;10;i++){
  22.          printf(&#34;%i&#34;,r[i]);
  23.          }
  24.     c=getche();
  25.     free(r);
  26.     return 0;
  27. }
  28.  
  29. //Multiplicacion de polinomios con divide y venceras
  30. int* MultiPoli(int* p, int n, int* q, int m){
  31.      int* P;
  32.      int* Pi;
  33.      int* Pd;
  34.      int* Q;
  35.      int* Qi;
  36.      int* Qd;
  37.      int* Ri;
  38.      int* Rd;
  39.      int* Rh;
  40.      int* Sp;
  41.      int* Sq;
  42.      int* f;
  43.      int* g;
  44.      int* h;
  45.      int* j;
  46.      int* X;
  47.      int x=0;
  48.      int y=0;
  49.      int i,N,M;
  50.      
  51.      if(n&#62;m){ //El vector mas grande es P
  52.             P=p;
  53.             Q=q;
  54.             N=n+1;
  55.             M=m+1;
  56.             }
  57.      else{
  58.           Q=p;
  59.           P=q;
  60.           N=m+1;
  61.           M=n+1;
  62.           }
  63.          
  64.      //Reservo Memoria
  65.      P=(int*)malloc((sizeof(int))*(N));
  66.      Q=(int*)malloc((sizeof(int))*(M));
  67.      Pi=(int*)malloc((sizeof(int))*(N/2));
  68.      Pd=(int*)malloc((sizeof(int))*(N/2));
  69.      Qi=(int*)malloc((sizeof(int))*(M/2));
  70.      Qd=(int*)malloc((sizeof(int))*(M/2));
  71.      Ri=(int*)malloc((sizeof(int))*(N));
  72.      Rd=(int*)malloc((sizeof(int))*(N));
  73.      Rh=(int*)malloc((sizeof(int))*(N));
  74.      Sp=(int*)malloc((sizeof(int))*(N/2));
  75.      Sq=(int*)malloc((sizeof(int))*(N/2));
  76.      f=(int*)malloc((sizeof(int))*(N/2));
  77.      g=(int*)malloc((sizeof(int))*(N));
  78.      h=(int*)malloc((sizeof(int))*(N*N));
  79.      j=(int*)malloc((sizeof(int))*(N*N));
  80.      X=(int*)malloc((sizeof(int))*(1));
  81.      
  82.      
  83.      if(M==1){ //Multiplicación Convencional. Caso Base
  84.           X[0]=P[0]*Q[0];
  85.           return X;
  86.           }
  87.      else{
  88.           for(i=0;i&#60;(N/2)-1;i++){ //Parte Izquierda de P
  89.                Pi[i]=P[i];
  90.                }
  91.           for(i=N/2;i&#60;N;i++){ //Parte Derecha de P
  92.                Pd[i]=P[i];
  93.                }
  94.           for(i=0;i&#60;(M/2)-1;i++){ //Parte Izquierda de Q
  95.                Qi[i]=Q[i];
  96.                }
  97.           for(i=M/2;i&#60;M;i++){ //Parte Derecha de Q
  98.                Qd[i]=P[i];
  99.                }
  100.           Ri=MultiPoli(Pi,N/2,Qi,M/2); //Llamada recursiva
  101.           Rd=MultiPoli(Pd,N/2,Qd,M/2); //Llamada recursiva
  102.            
  103.           for(i=0;i&#60;(N/2)-1;i++){ // Pi+Pd
  104.                Sp[i]=Pi[i]+Pd[i];
  105.                }
  106.           for(i=0;i&#60;(M/2)-1;i++){ // Qi+Qd
  107.                Sq[i]=Qi[i]+Qd[i];
  108.                }
  109.           Rh=MultiPoli(Sp,N/2,Sq,M/2); //Llamada recursiva
  110.          
  111.           for (i=0;i&#60;(N/2)-1;i++){ // Rh+Ri+Rd
  112.               f[i]=Rh[i]-Ri[i]-Rd[i];
  113.               }
  114.           for (i=0;i&#60;(N/2)-1;i++){ // 1.-(Rh+Ri+Rd)*Xn/2
  115.               g[i]=0;
  116.               }
  117.           for (i=N/2;i&#60;N;i++){ // 2.-(Rh+Ri+Rd)*Xn/2
  118.               g[i]=f[x];
  119.               x++;
  120.               }
  121.           for (i=0;i&#60;N-1;i++){ // 1.-Rd*Xn
  122.               h[i]=0;
  123.               }
  124.           for (i=N;i&#60;2*N;i++){ // 2.-Rd*Xn
  125.               h[i]=Rd[y];
  126.               y++;
  127.               }
  128.              
  129.           for(i=0;i&#60;2*N;i++){ // Calculo la solucion
  130.               j[i]=Ri[i]+g[i]+h[i];
  131.               }
  132.              
  133.           return j;
  134.          
  135.      }//Fin else
  136.      
  137.      //Libero Memoria
  138.      free(P);
  139.      free(Pi);
  140.      free(Pd);
  141.      free(Q);
  142.      free(Qi);
  143.      free(Qd);
  144.      free(Ri);
  145.      free(Rd);
  146.      free(Rh);
  147.      free(Sp);
  148.      free(Sq);
  149.      free(f);
  150.      free(g);
  151.      free(h);
  152.          
  153. }//Fin metodo
  154.  
  155.  

Gracias por todo. Salu2



Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Porque No Compila Esto En C?
« Respuesta #18 en: Jueves 8 de Marzo de 2007, 19:12 »
0
Ahora lo que esta pasando es que se te acaba la pila, seguramente por un bucle infinito (lo mas probable es que este relacionado con la recursividad).

Por otro lado la inicializacion de r no tiene ningun sentido ya que despues vas a "machacar" su valor, esa memoria nunca se liberara. Ahora parece que esta mejor MultiPoli ya que solo devuelve x y j y ambos los reservas PERO los free nunca se van a ejecutar, tenes que ponerles en los dos puntos de retorno y liberar TODO excepto x y j dependiendo de cual sea el que devuelvas.

Si podes depurar el programa mucho mejor.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.