Ciao,
ho corretto gran parte del codice. C'è comunque un errore nella funzione che si occupa di fare il prodotto vero e proprio tra le matrici. Quello lo lascio a te... 
#include <stdio.h>
#include <stdlib.h>
void acquisizionematrice(int *matrice, int righe, int colonne); /*prototipo funzione*/
void stampamatrice(int *matrice, int righe, int colonne); /*prototipo funzione*/
void prodottomatrici(int *matrice1, int *matrice2, int *matriceprodotto, int righe, int colrig, int colonne); /*prototipo funzione*/
int main()
{
    int *A; /*puntatore alla matrice A*/
    int *B; /*puntatore alla matrice B*/
    int *C; /*puntatore alla matrice C prodotto di A e B*/
    int n; /*righe di A*/
    int p; /*colonne di A*/
    int q; /*righe di B*/
    int m; /*colonne di B*/
    printf("Inserisci il numero di righe e di colonne della matrice A.\n");
    scanf("%d", &n);
    scanf("%d", &p);
    printf("Inserisci il numero di righe e di colonne della matrice B.\n");
    scanf("%d", &q);
    scanf("%d", &m);
    if (p!=q)   /*Controllo eseguibilità del prodotto*/
    {
        printf("Il prodotto righe per colonne tra A e B non è eseguibile.\n");
    }
    else
    {
        A=(int*)malloc(n*p*sizeof(int));
        acquisizionematrice(A, n, p); /*chiamata alla funzione che acquisisce la matrice*/
        printf("La matrice A e':\n");
        stampamatrice(A, n, p); /*chiamata alla funzione che stampa la matrice*/
        B=(int*)malloc(q*m*sizeof(int));
        acquisizionematrice(B, q, m); /*chiamata alla funzione che acquisisce la matrice*/
        printf("La matrice B e':\n");
        stampamatrice(B, q, m); /*chiamata alla funzione che stampa la matrice*/
        C=(int*)malloc(n*m*sizeof(int));
        printf("La matrice prodotto tra A e B e':\n");
        prodottomatrici(A, B, C, n, p, m); /*Chiamata alla funzione che effettua il prodotto righe per colonne tra A e B*/
    }
    system("PAUSE");
    return 0;
} /*Fine main*/
/*definizione funzione*/
void acquisizionematrice(int *matrice, int righe, int colonne)
{
    int i;
    int j;
    {
        for(i=0; i<righe; i++)
        {
            for(j=0; j<colonne; j++)
            {
                printf("Inserisci l'elemento di posto %d,%d della matrice\n", i, j);
                scanf("%d", &matrice[i*righe+j]);
            }
        }
    }
}
/*definizione funzione*/
void stampamatrice(int *matrice, int righe, int colonne)
{
    int i;
    int j;
    {
        for(i=0; i<righe; i++)
        {
            for(j=0; j<colonne; j++)
            {
                printf("%d  ", matrice[i*righe+j]);
            }
            printf("\n");
        }
    }
}
/*definizione funzione*/
/* SBAGLIATA */
void prodottomatrici(int *matrice1, int *matrice2, int *matriceprodotto, int righe, int colrig, int colonne)
{
    int i;
    int j;
    int k;
    {
        for(i=0; i<righe; i++)
        {
            for(j=0; j<colonne; j++)
            {
                for(k=0; k<colrig; k++)
                {
                    matriceprodotto[i*righe+j] += matrice1[i*righe+k]*matrice2[k*colrig+j];
                }
            }
        }
    }
    stampamatrice(matriceprodotto, righe, colonne);
}
P.S. Ci sono anche parecchie parentesi graffe inutili ma quelle le ho lasciate... Non fanno danni ma sono comunque inutili e possono complicare la lettura del codice.