Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gdb 如果您甚至错误地计算了数据类型的大小,事情怎么还能继续工作?_Gdb_Typedef - Fatal编程技术网

Gdb 如果您甚至错误地计算了数据类型的大小,事情怎么还能继续工作?

Gdb 如果您甚至错误地计算了数据类型的大小,事情怎么还能继续工作?,gdb,typedef,Gdb,Typedef,这是代码中的内容: typedef unsigned long int ub4; /* unsigned 4-byte quantities */ 然而: (gdb) p sizeof(unsigned long int) $7 = 8 所以unsigned long int实际上占用了我的CPU 8个字节。当有这样的基本错误时,事情怎么还能工作呢 顺便问一下,为什么gdb不能识别ub4 (gdb) p sizeof(ub4) No symbol "ub4" in current

这是代码中的内容:

typedef  unsigned long  int  ub4;   /* unsigned 4-byte quantities */
然而:

(gdb) p sizeof(unsigned long  int)
$7 = 8
所以
unsigned long int
实际上占用了我的CPU 8个字节。当有这样的基本错误时,事情怎么还能工作呢

顺便问一下,为什么gdb不能识别ub4

(gdb) p sizeof(ub4)
No symbol "ub4" in current context.

我假设你说的是C。请用正确的语言标记你的问题

在开发人员拥有假定ub4正好是4字节的代码之前,事情仍然可以“工作”。然后,这样的错误可能会导致缓冲区溢出(这可能无法明显检测到,甚至可能在随机出现症状之前多年都未被注意到)。。。或者他们可能只是碰巧没有引起症状。不过,它们仍在调用未定义的行为,应该进行修复


也有可能是开发人员在代码中从未真正使用过类型宽度作为假设。

“事情是如何工作的?”“顺便说一句,为什么事情不工作?”Wtf。冲突是什么?你有一个明显错误的注释,还有一个有点命名错误的变量。您没有向我们展示任何要求ub4为四个字节的内容。顺便说一句,可能是调试信息中没有typedef,或者gdb可能无法处理这个问题。除非
typedef
替换发生在gcc中积累调试信息之前,否则我看不出有什么特别的原因。您将如何命名
ub4
,以便它对不同的体系结构有意义,同时仍然包含字节大小的信息???@compile fan:
unsigned long int
@compile fan:(作为一个严肃的回答,从另一个方向考虑,
stdint.h
包含固定宽度的类型。您可以使用
uint32\u t
并知道它的宽度为32位。)