Почему вы хотите использовать то, что вы называете сокращенным стилем цикла for?
for loop - просто синтаксический сахар для цикла while ниже:
for (INIT ; ENDTEST ; STEP){
DO_SOME_STUFF
}
означает
INIT
while (ENDTEST) {
DO_SOME_STUFF
STEP
}
Следовательно, ваши две петли делают:
int a = 0;
int b = 0;
while (a < size){
while (b < size){
DO_SOME_STUFF
b++;
}
a++;
}
В этой форме вы можете легко увидеть, что инициализация b не выполняется там, где должна.
Все, что я мог бы сказать, это избегать использования сокращенных циклов for, удаление инициализации не лучше, чем удаление завершения теста или удаление шага цикла (оба также допустимы в C) - все это простые способы исправления ошибок в ваших программах. Только не делай этого.