#include <stdio.h>
#include <stdlib.h>

struct vec_int{
	int allocate_size;
	int size; // used size
	int* val;
};
void valloc(struct vec_int* p_vec, int size){
	p_vec->allocate_size = size;
	p_vec->size = size;
	p_vec->val = (int*)malloc(size*sizeof(int));
	return p_vec;
}

struct vvec_int{
	int allocate_size;
	int size; // used size
	struct vec_int* val;
};
void vvalloc(struct vvec_int* p_vvec, int rows, int cols){
	p_vvec->allocate_size=rows;
	p_vvec->size=rows;
	p_vvec->val = (struct vec_int*)malloc(rows*sizeof(struct vec_int));
	for(int i=0; i<rows; i++){
		valloc(&p_vvec->val[i], cols);
	}
	return p_vvec;
}

void vvprint(const struct vvec_int* p_vvec){
	for(int p=0; p<p_vvec->size; p++){
		printf("[ ");
		for(int q=0; q<p_vvec->val[p].size; q++){
			printf("%d ", p_vvec->val[p].val[q]);
		}
		printf("]\n");
	}
}

int main(){
	struct vvec_int vvec;
	vvalloc(&vvec, 3, 3);
	
	int i=0;
	for(int p=0; p<vvec.size; p++){
		for(int q=0; q<vvec.val[p].size; q++){
			vvec.val[p].val[q] = i++;
		}
	}
	
	vvprint(&vvec);
	return 0;
}