Hay algunos detalles:
Código:
imagen=(int*)malloc(ancho*alto*sizeof(int));
printf("el resultado es %d",repetir(imagen,ancho,alto,color));
Estás asignando la memoria, pero no estas inicializando los valores de la imagen, yo lo he puesto así para poder ver los datos y saber que se están leyendo bien:
Código:
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); // Liberar la memoria usada.
El cálculo correcto para acceder a los elementos de una matriz que está representada de forma lineal es x+(y*ancho), quedando así en el código:
Código:
printf("%d ",*(img + (i + (j*ncols))));
por último la comparación de las variables en el for no es hasta j<=nfilas es hasta j<nfilas, recuerda que empieza en 0 no en 1, y por motivos de comodidad yo invertiría los for para que así vaya en orden recorriendo la matriz y escriba los valores en pantalla como en la imagen, así:
Código:
for(j=0;j<nfilas;j++)
for(i=0;i<ncols;i++)
printf("%d ",*(img + (i + (j*ncols))));
No he revisado que haga bien el trabajo que pone en el ejercicio, solo me he limitado a revisar que los datos se lean bien desde "imagen".
PD: ¿Por qué el código en verde? casi no se lee.
Saludos.