On Monday 11 January 2010 22:13:31 Rafał Miłecki wrote: > 2010/1/10 Michael Buesch <mb@xxxxxxxxx>: > > On Sunday 10 January 2010 23:13:34 Rafał Miłecki wrote: > >> + s32 results_min[4]; > >> + u8 vcm_final[4]; > >> + s32 results[4][4]; > >> + s32 miniq[4][2]; > >> + memset(results_min, 0, sizeof(s32) * 4); > >> + memset(vcm_final, 0, sizeof(u8) * 4); > >> + memset(results, 0, sizeof(s32) * 4 * 4); > >> + memset(miniq, 0, sizeof(s32) * 4 * 2); > > > > Just initialize the variables to zero instead of doing a memset: > > > > + s32 results_min[4] = { 0, }; > > + u8 vcm_final[4] = { 0, }; > > + s32 results[4][4] = { 0, }; > > + s32 miniq[4][2] = { 0, }; > > Nice trick, thanks :) Just for two-dimensional arrays I'll have to hack it to: > s32 results[4][4] = { { 0, }, { 0, }, { 0, }, { 0, } }; > I believe. No I don't think so. It's C standard that uninitialized elements on automatic variables are initialized to zero, _if_ at least one element is initialized to something. So if you init one element to 0, all others will be 0, too. I think that should also work for multidimensional arrays. So my example s32 results[4][4] = { 0, }; should do the right thing. Am I wrong? Here's a test-program: mb@maggie:~$ cat t.c #include <stdio.h> #include <stdint.h> int main(void) { int i, j; int32_t results[4][4] #ifdef INIT_IT = { 0, }; #else ; #endif for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) printf("%d\n", results[i][j]); } mb@maggie:~$ gcc -o t t.c mb@maggie:~$ ./t 0 0 0 1 -1077483840 0 0 0 -1077483824 268436224 268536212 0 -1077483776 268436888 268353524 0 mb@maggie:~$ gcc -D INIT_IT -o t t.c mb@maggie:~$ ./t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -- Greetings, Michael. -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html