Although overall i use this method, but as im more often running into need after knowing how long is my arrays im started to make upper mentioned struct.

Code:
void*** masivs_2d(int garums, int augstums)
{
	//pirmā dimensija
	void** masivs = jauni(void*, garums);
	//otrās dimensijas
	int lok_i = 0;
	for(lok_i = 0; lok_i < garums; lok_i++)
	{
		(masivs)[lok_i] = jauni(void*, augstums);
	}
	return (void***)masivs;
}

function masivs_2d_dzest(void*** masivs, garums)
{
	int lok_i = 0;
	for(lok_i = 0; lok_i < garums; lok_i += 1)
	{
		sys_free((masivs)[lok_i]);
	}
	sys_free(masivs);
	return NULL;
}

void print_var(void*** input_array, BOOL index_x, BOOL index_y)
{
	var* output_var = ((lok_array)[index_x])[index_y];
	
	printf("array[%.0f][%.0f] = %.0f", (double)index_x, (double)index_y, (double)*output_var);
}

function main()
{
vars* vars = masivs_2d(8, 8);
//fill it up, but still it is pointer array
print_var(vars, 4, 4)
}



Arrovs once will publish game