#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// problem: var6 becomes -1 inside func2 during the use of the inner for loop
#define N1 7
#define N2 6
#define N3 10
void func1()
{
// do stuff
}
void func2(int var1[], int var2[], int var3[][N2], int var4[])
{
int i, j;
for (i = 0; i < N3; i++)
{
for (j = 0; j < N2; j++) // this line here is where var6 goes from 0 to -1
{
// stuff
}
}
// more code here
}
int main()
{
// i have completely commented out this function call and foo still is changed.
// left it in just in case
func1();
int var1[N1];
int var2[N1];
int var3[N1][N2];
int var4[N1];
// int foo; // if foo is declared then the problem does not occur
// if var5 and var6 are declared after func2 then var6 does not become -1
int var5[1000];
int var6 = 0;
func2(var1, var2, var3, var4);
// more code
}
I2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgCiNpbmNsdWRlIDxzdGRsaWIuaD4gICAgIAojaW5jbHVkZSA8dGltZS5oPiAgICAgIAoKLy8gcHJvYmxlbTogdmFyNiBiZWNvbWVzIC0xIGluc2lkZSBmdW5jMiBkdXJpbmcgdGhlIHVzZSBvZiB0aGUgaW5uZXIgZm9yIGxvb3AKCiNkZWZpbmUgTjEgNwojZGVmaW5lIE4yIDYKI2RlZmluZSBOMyAxMAoKdm9pZCBmdW5jMSgpCnsKCS8vIGRvIHN0dWZmCQp9Cgp2b2lkIGZ1bmMyKGludCB2YXIxW10sIGludCB2YXIyW10sIGludCB2YXIzW11bTjJdLCBpbnQgdmFyNFtdKQp7CglpbnQgaSwgajsKCQoJZm9yIChpID0gMDsgaSA8IE4zOyBpKyspCgl7CgkJZm9yIChqID0gMDsgaiA8IE4yOyBqKyspICAvLyB0aGlzIGxpbmUgaGVyZSBpcyB3aGVyZSB2YXI2IGdvZXMgZnJvbSAwIHRvIC0xCgkJewoJCQkvLyBzdHVmZgoJCX0KCX0KCQoJLy8gbW9yZSBjb2RlIGhlcmUKfQoKaW50IG1haW4oKQp7CglzcmFuZCh0aW1lKE5VTEwpKTsKCQoJLy8gaSBoYXZlIGNvbXBsZXRlbHkgY29tbWVudGVkIG91dCB0aGlzIGZ1bmN0aW9uIGNhbGwgYW5kIGZvbyBzdGlsbCBpcyBjaGFuZ2VkLgoJLy8gbGVmdCBpdCBpbiBqdXN0IGluIGNhc2UKCWZ1bmMxKCk7CgkKCWludCB2YXIxW04xXTsKCWludCB2YXIyW04xXTsKCWludCB2YXIzW04xXVtOMl07CglpbnQgdmFyNFtOMV07CgkKCS8vIGludCBmb287IC8vIGlmIGZvbyBpcyBkZWNsYXJlZCB0aGVuIHRoZSBwcm9ibGVtIGRvZXMgbm90IG9jY3VyCgkKCS8vIGlmIHZhcjUgYW5kIHZhcjYgYXJlIGRlY2xhcmVkIGFmdGVyIGZ1bmMyIHRoZW4gdmFyNiBkb2VzIG5vdCBiZWNvbWUgLTEKCWludCB2YXI1WzEwMDBdOwoJaW50IHZhcjYgPSAwOwoJCglmdW5jMih2YXIxLCB2YXIyLCB2YXIzLCB2YXI0KTsKCQoJLy8gbW9yZSBjb2RlCn0=