sizeof(arr) / sizeof(arr[0])的漏洞
来源:5-3 数组增删改查及二维数组

cylqd
2021-08-28
int arr[0] = {};
int len = sizeof(arr) / sizeof(arr[0]);
我测试,在msvc中,声明空数组就会报错
在mingw中,不会报错,计算也正常,但是arr[0]明显是越界了,但测试发现sizeof(arr[0])只是计算大小,不会真去取值,问题应该也不大,int len = sizeof(arr) / sizeof(arr[9999999999999999999]) 也是可以的。
这种方法经测试在二维数组上不行,计算结果错误
写回答
1回答
-
quickzhao
2021-08-28
标准的C/C++中,长度为0的数组应该是不被允许的。你说的情况应该是GNU/GCC 对标准的扩展,你可以查下柔性数组,对于某些特殊情况下,对于内存分配可以使用这种技巧,可以更有效率的控制空间的分配和释放。可以参考下这里:https://blog.csdn.net/gatieme/article/details/64131322 但个人认为你做这种试验的意义不大。
00
相似问题