我有一个程序,它应该重置某个valriable,如果给定数组中的第n +1个值是不存在的,即NULL,即使该值是null -这是通过print语句验证的,程序并不总是这样做。
等于null的值是next,它也等于(*globalnodeSet[Z1]).memPool[((*globalnodeSet[Z1]).pc)+ 1][0])
int startFunction(void* execState)
{
while(1)
{
int *x = (int*)execState;
if (*x == 1 )
{
for(;;)
{
// 1 second time gap between cycles
Sleep(200);
//program counter increments and so does the active node
Z1 ++; (*globalnodeSet[Z1]).pc++;(*globalnodeSet[Z1]).acc++;
//logic loop
printf("\nrunning - CCX:%u PC: %u\n",Z1 ,(*globalnodeSet[Z1]).pc);
printf("the next instruction in memory is : %s\n",(*globalnodeSet[Z1]).memPool[((*globalnodeSet[Z1]).pc) + 1][0]);
//if last core is reached
if (Z1 == 11)
{
int counter = 0;
for(counter = 0; counter <= 11; counter++)
{
//reset loop and increment all program counters
//checks if next instruction exists at all
char *next = (*globalnodeSet[counter]).memPool[((*globalnodeSet[counter]).pc) + 1][0];
if(next == NULL)
{
//if no next instruction exists - set the program counter to -1 so that the first , 0th instruction will be executed on the next cycle.
(*globalnodeSet[counter]).pc = -1;
} else printf("not null\n");
}
//loop counter is reset
Z1 = - 1;
}
//if the end of a node's instruction is reached , either pc = 11 or no next instruction exists
if((*globalnodeSet[Z1]).pc == 11 || (*globalnodeSet[Z1]).memPool[((*globalnodeSet[Z1]).pc) + 1][0] == NULL)
{
//reset the program counter
(*globalnodeSet[Z1]).pc = -1;
}
//if stop button is pressed
if (*x == 0) return 0;
//we are using pointers so sim values are still retained upon function exit
}
}
}
}
程序的这一部分的输出如下:
running - CCX:0 PC: 0
the next instruction in memory is : (null)
running - CCX:1 PC: 0
the next instruction in memory is : (null)
running - CCX:2 PC: 0
the next instruction in memory is : (null)
running - CCX:3 PC: 0
the next instruction in memory is : (null)
running - CCX:4 PC: 0
the next instruction in memory is : (null)
running - CCX:5 PC: 0
the next instruction in memory is : (null)
running - CCX:6 PC: 0
the next instruction in memory is : (null)
running - CCX:7 PC: 0
the next instruction in memory is : (null)
running - CCX:8 PC: 0
the next instruction in memory is : (null)
running - CCX:9 PC: 0
the next instruction in memory is : (null)
running - CCX:10 PC: 0
the next instruction in memory is : (null)
running - CCX:11 PC: 0
the next instruction in memory is : (null)
not null
not null
not null
not null
not null
not null
not null
not null
not null
not null
not null
在输出中可以看到,它实际上等于NULL,但是程序并不总是这样,而是在第二个print语句中打印“not null”,而不是NULL,就像它在第一个中一样。
1条答案
按热度按时间of1yzvn41#
因此程序崩溃。