当数组定义如下时,意味着什么:
char a[256<<1];
char b[256<<1];有没有人知道为什么当a在b之前定义时代码可以工作,而当a在b之后定义时代码就不能工作?就像这样是行不通的:
char b[256<<1];
char a[256<<1];
...other code with a and b;发布于 2011-12-14 17:27:54
我不能立即看到一个原因,因为没有上下文。也许如果数组所属的某个结构是通过指针算法访问的,那么是的,我可以看到发生这种情况的原因,或者只是指针算法一般假设a和b的顺序。否则,我看不出为什么这会导致失败。如果您可以提供上下文,这将有所帮助。
重新排列它可能会在代码中的某个地方显示缓冲区溢出(可能以前a只是溢出到b中,但现在因为这个新的顺序,a溢出到其他堆栈变量中,并导致奇怪的事情发生)。如果您正在使用不安全的调用,例如对长度超过512个字符的行进行get之类的调用,这是很常见的。
<<是左移位运算符,所以它取256,并将其左移1位,即为512。
发布于 2011-12-14 17:29:11
256<<1表示256位左移一位,即512。至于为什么代码以一种顺序工作,而不是以另一种顺序工作,最可能的解释是代码中有一个bug,它访问一个越界的数组,幸运的是,在一种情况下,访问会到达另一个数组。但也有其他的可能性。例如,代码可能会计算指向每个数组的指针的差值,并期望得到一个正结果。
发布于 2011-12-14 17:28:18
在本例中,<<运算符表示位左移。因此,x<<1是x左移一位的整数,与x*2相同,256<<1是512。
https://stackoverflow.com/questions/8502060
复制相似问题