Processo dove è presente clock_gettime
codice:
 case 1: clock_gettime(CLOCK_REALTIME, &ts1); /* E' qui che si verifica l'errore! */
                    a=(short*)malloc(n_a*m_a*sizeof(short));
                    b=(short*)malloc(n_b*m_b*sizeof(short));
                    c=(short*)malloc(n_a*m_b*sizeof(short));
                    s_main(a,b,c,n_a,m_a,n_b,m_b);
                    clock_gettime(CLOCK_REALTIME, &ts2);
                    eTime0 = (double)(ts2.tv_sec - ts1.tv_sec);
                    eTime1 = (double)(ts2.tv_nsec - ts1.tv_nsec);
                    eTime = eTime0 + eTime1*1.0e-9;
                    printf("\ngettime(): \t\t\tElapsed Time = %e sec", eTime);
                    break;
Main.c
codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main()
{
    short *a,*b,*c,i,j,n_a,n_b,m_a,m_b,x;
    struct timespec ts1, ts2; double eTime, eTime0, eTime1;

    do
    {
        puts("Inserire numero di righe della matrice A:");
        scanf("%hd",&n_a);
        __fpurge(stdin);
        puts("Inserire numero di colonne della matrice A:");
        scanf("%hd",&m_a);
        __fpurge(stdin);
        puts("Inserire numero di righe della matrice B:");
        scanf("%hd",&n_b);
        __fpurge(stdin);
        puts("Inserire numero di colonne della matrice B:");
        printf("(Il numero di colonne della matrice B deve essere uguale al numero di righe della matrice A(%hd)):\n",n_a);
        scanf("%hd",&m_b);
        __fpurge(stdin);}while(n_a!=m_b);

    while(x!=3)
    {
        puts("1.Processo con malloc.");
        puts("2.Processo con calloc.");
        puts("3.Fine.");
        puts("Inserire scelta:");
        scanf("%hd",&x);
        __fpurge(stdin);

        switch(x)
        {
            case 1: clock_gettime(CLOCK_REALTIME, &ts1); /* E' qui che si verifica l'errore! */
                    a=(short*)malloc(n_a*m_a*sizeof(short));
                    b=(short*)malloc(n_b*m_b*sizeof(short));
                    c=(short*)malloc(n_a*m_b*sizeof(short));
                    s_main(a,b,c,n_a,m_a,n_b,m_b);
                    clock_gettime(CLOCK_REALTIME, &ts2);
                    eTime0 = (double)(ts2.tv_sec - ts1.tv_sec);
                    eTime1 = (double)(ts2.tv_nsec - ts1.tv_nsec);
                    eTime = eTime0 + eTime1*1.0e-9;
                    printf("\ngettime(): \t\t\tElapsed Time = %e sec", eTime);
                    break;

            case 2: clock_gettime(CLOCK_REALTIME, &ts1);
                    a=(short*)calloc(n_a*m_a,sizeof(short));
                    b=(short*)calloc(n_b*m_b,sizeof(short));
                    c=(short*)calloc(n_a*m_b,sizeof(short));
                    s_main(a,b,c,n_a,m_a,n_b,m_b);
                     clock_gettime(CLOCK_REALTIME, &ts2);
eTime0 = (double)(ts2.tv_sec - ts1.tv_sec); // sec
eTime1 = (double)(ts2.tv_nsec - ts1.tv_nsec); // nano sec
eTime = eTime0 + eTime1*1.0e-9; // sec
printf("\ngettime(): \t\t\tElapsed Time = %e sec", eTime);
                    break;

            case 3: puts("Uscita");
                    break;

            default:    puts("Inserire un valore tra 1 e 3.");
                        break;
        }
    }
}
s_main.c
codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void s_main(short *a,short *b,short *c,short n_a,short m_a,short n_b,short m_b)
{
            comp(n_a,m_a,a);
            comp(n_b,m_b,b);

            stamp(n_a,m_a,a,'A');
            stamp(n_b,m_b,b,'B');

            prod(n_a,m_a,n_b,m_b,a,b,c);

            stamp(n_a,m_b,c,'C');
}
comp.c
codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void comp(short n_x,short m_x, short *x)
{
    srand(time (NULL));

    short i,j;

    for(i=0;i<n_x;i++)
    for(j=0;j<m_x;j++)
    *(x+i*n_x+j)=rand()%10;
}
stamp.c
codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void stamp(short n_x,short m_x,short *x,char y)
{
    short i,j;
    printf("\n\nMatrice %c:\n",y);

    for(i=0;i<n_x;i++)
    {
        printf("\n");
        for(j=0;j<m_x;j++)
        printf("%hd ",*(x+i*n_x+j));
    }
}
prod.c
codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void prod(short n_x,short m_x,short n_y,short m_y,short *a,short *b,short *c)
{
    short i,j,k,x,sum;

    for (i=0;i<n_x;i++)
    for (j=0;j<m_y;j++)
    {
        sum=0;
        for (k=0;k<m_x;k++)
        {
            x=(*(a+(i*n_x)+k))*(*(b+k*n_y+j));
            sum=sum+x;
        }
        *(c+i*n_x+j)=sum;
    }
}
Grazie!