指针类型转换(GC_CELL_OP)的使用不正确

作者: safocl创建于 2026年6月22日更新于 2026年7月9日
标签BugTriage

此宏将“ cell” 指向指向“ char” , 进行算术操作, 然后将其指向“ struct gc cell” 页:1

define GC CELL OP(阿兰,单元格,操作,参数)?

(单位:千美元) (结构 gc cell ) (单位:千美元) ((char)(手机)) \ op () (arg) *(arna)- > cell 大小) (中文(简体) ). (中文(简体) ).

然而,只有在指针所引用的对象是带有 " struct gc cell " 类型的 pointer-interconfer 时,才能进行此操作。 此外,如果指针不是指向一系列 " struct gc cell " 元素的指针,那么在指针上进行算术不能比 " object " 在其 " object 表示 " 中所占据的更远。 允许在  object 的  object 表示式 的最后一个字节后获得指针,但使用后这个指针不能成为下个 object 的开始.

换句话说:
页:1
a[大小(int) * 10]=      ;
int * p1 = (int *) & a[大小 (int * 0)];
a[大小(int) * 1];

*p1=5;
*p2=42;

char * pc1 = (char *)p1) + sizeof( int);
int * pc1; 2.
*past the end 1=33;//无效使用

ISO/IEC 9899:TC2 委员会草案——2005年5月6日 WG14/N1124

6.2.6 类别说明 6.2.6.1 一般情况

  1. 存储在任何其他对象类型的非位域对象中的值由n×CHAR BIT比特组成,其中n是该类型对象的大小,以字节表示. 该值可能被复制为类型为无符号的 char [n] (例如由memcpy) 的对象;由此而来的一系列字节被称为该值的对象表示.
  2. 某些对象表示不一定代表对象类型的值。 如果一个对象所存储的值有这样的表示并被一个没有字符类型的Lvalue表达式所读取,那么行为就是没有定义的.

6.3.2.3 指针

  1. [.] 当指向对象的指针被转换成指针到字符类型时,结果会指向对象最小的被处理字节. 结果相继递增,以物体大小为限,使指向物体所剩的字节.

6.5.6 附加运算符

  1. 当一个有整数类型的表达式被加到指针上或从指针上被去掉时,结果具有指针操作符的类型. 如果指向数组对象的某一个元素,而数组足够大,结果则指向从原元素中被抵消的元素,使所生成的和原数组元素的下标相差等于整数表达式. 换句话说,如果表达式P指向一个阵列对象的 i th元素,则表达式(P)+N(相当于N+(P))和(P)-N(其中N有 n )分别指向该阵列对象的i+n-th和 i-n--th元素,只要它们存在. 此外,如果表达式P指一个阵列对象的最后一个元素,则表达式(P)+1将比该阵列对象的最后一个元素[...]多出一分. 如果指针操作和 . . . . . . .

内容来源: flipperdevices/flipperzero-firmware