Może tak:
http://ideone.com/snRIB3
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
void triarr_fill(unsigned rows, int **array) {
unsigned i,j;
for(i=0;i<rows;i++)
for(j=0;j<i+1;j++)
array[i][j]=i-j;
}
void triarr_print(unsigned rows, int **array) {
unsigned i,j;
for(i=0;i<rows;i++) {
for(j=0;j<i+1;j++)
printf("%d ",array[i][j]);
printf("\n");
}
}
int main(void) {
unsigned i, nrows;
scanf("%u",&nrows);
int **triarray = malloc(sizeof(int*)*nrows);
for(i=0; i<nrows; i++)
triarray[i] = malloc(sizeof(int)*(i+1));
triarr_fill(nrows,triarray);
triarr_print(nrows,triarray);
for (i=0; i<nrows; i++) free(triarray[i]);
free(triarray);
return 0;
}