Ver Mensaje Individual
  #5 (permalink)  
Antiguo 23/08/2008, 16:57
yackcae
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 11 meses
Puntos: 2
Respuesta: Ayuda urgente plis

Si la libera, pero lo hace cuando ya la has usado y no la vas a necesitar más, me explico:

Código:
...
printf("escribe el color\n");
scanf("%d",&color);
imagen=(int*)malloc(ancho*alto*sizeof(int)); // Se asigna la memoria
printf("el resultado es %d",repetir(imagen,ancho,alto,color)); // Se usa la memoria y se obtienen los resultados deseados
// como ya no se va a usar más la memoria, porque se va a terminar el programa, la libero
free(imagen);

scanf("%d",&pause); // Solo se hace para poder ver los resultados
return 0; // Se termina el programa
Que extraño que aún no te sirva, pongo el código completo, como lo he probado yo, para que lo pruebes, a ver que tal:
Código:
#include <stdio.h>
#include <stdlib.h>
int repetir(int* img,int ncols, int nfilas, int color);

int main(int argc,char* argv)
{
int alto,ancho,pause;
int* imagen;
int color;

printf("introduce el ancho\n");

scanf("%d",&ancho);
printf("introduce el alto\n");

scanf("%d",&alto);

printf("escribe el color\n");
scanf("%d",&color);
imagen=(int*)malloc(ancho*alto*sizeof(int));
// Inicio todos los datos a 0, 1, 2, 3, 4... para ver con claridad las pruebas.
for(int i=0; i<ancho*alto; i++) *(imagen+i)=i;
printf("el resultado es %d",repetir(imagen,ancho,alto,color));
free(imagen); // Como ya no se necesita se libera la memoria.

scanf("%d",&pause);
return 0;
}

int repetir(int* img,int ncols, int nfilas, int color)
{
int i,j,error;
int mono;
int alto=0;
for (j=0;j<nfilas;j++) {
 for(i=0;i<ncols;i++)
  printf("%d ",*(img + (i + (j*ncols))));
 printf("\n");
}

for(i=0;i<ncols;i++)
{for (j=0;j<nfilas;j++)
// a partir de este punto no he cambiado ni revisado nada
{ mono=*(img+i *0+j);
if ((mono<(color-20))||(mono>(color+40)))

{
printf("ubo un error al comparar %d con %d\n",*(img+i * j),color);
error=1;
i=ncols;
}}}

return error;
}
He puesto en negrita y subrayado las cosas que he modificado del código, si se le pasa como ancho = 2 alto = 2 y color = 2 debería poner en pantalla:
Código:
0 1
2 3
el resultado es 0