#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++){
for(int q=0; q<p_vvec->val[p].size; q++){
printf("%d ", p_vvec
->val
[p
].
val[q
]); }
}
}
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;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0cnVjdCB2ZWNfaW50ewoJaW50IGFsbG9jYXRlX3NpemU7CglpbnQgc2l6ZTsgLy8gdXNlZCBzaXplCglpbnQqIHZhbDsKfTsKdm9pZCB2YWxsb2Moc3RydWN0IHZlY19pbnQqIHBfdmVjLCBpbnQgc2l6ZSl7CglwX3ZlYy0+YWxsb2NhdGVfc2l6ZSA9IHNpemU7CglwX3ZlYy0+c2l6ZSA9IHNpemU7CglwX3ZlYy0+dmFsID0gKGludCopbWFsbG9jKHNpemUqc2l6ZW9mKGludCkpOwoJcmV0dXJuIHBfdmVjOwp9CgpzdHJ1Y3QgdnZlY19pbnR7CglpbnQgYWxsb2NhdGVfc2l6ZTsKCWludCBzaXplOyAvLyB1c2VkIHNpemUKCXN0cnVjdCB2ZWNfaW50KiB2YWw7Cn07CnZvaWQgdnZhbGxvYyhzdHJ1Y3QgdnZlY19pbnQqIHBfdnZlYywgaW50IHJvd3MsIGludCBjb2xzKXsKCXBfdnZlYy0+YWxsb2NhdGVfc2l6ZT1yb3dzOwoJcF92dmVjLT5zaXplPXJvd3M7CglwX3Z2ZWMtPnZhbCA9IChzdHJ1Y3QgdmVjX2ludCopbWFsbG9jKHJvd3Mqc2l6ZW9mKHN0cnVjdCB2ZWNfaW50KSk7Cglmb3IoaW50IGk9MDsgaTxyb3dzOyBpKyspewoJCXZhbGxvYygmcF92dmVjLT52YWxbaV0sIGNvbHMpOwoJfQoJcmV0dXJuIHBfdnZlYzsKfQoKdm9pZCB2dnByaW50KGNvbnN0IHN0cnVjdCB2dmVjX2ludCogcF92dmVjKXsKCWZvcihpbnQgcD0wOyBwPHBfdnZlYy0+c2l6ZTsgcCsrKXsKCQlwcmludGYoIlsgIik7CgkJZm9yKGludCBxPTA7IHE8cF92dmVjLT52YWxbcF0uc2l6ZTsgcSsrKXsKCQkJcHJpbnRmKCIlZCAiLCBwX3Z2ZWMtPnZhbFtwXS52YWxbcV0pOwoJCX0KCQlwcmludGYoIl1cbiIpOwoJfQp9CgppbnQgbWFpbigpewoJc3RydWN0IHZ2ZWNfaW50IHZ2ZWM7Cgl2dmFsbG9jKCZ2dmVjLCAzLCAzKTsKCQoJaW50IGk9MDsKCWZvcihpbnQgcD0wOyBwPHZ2ZWMuc2l6ZTsgcCsrKXsKCQlmb3IoaW50IHE9MDsgcTx2dmVjLnZhbFtwXS5zaXplOyBxKyspewoJCQl2dmVjLnZhbFtwXS52YWxbcV0gPSBpKys7CgkJfQoJfQoJCgl2dnByaW50KCZ2dmVjKTsKCXJldHVybiAwOwp9