decNumber.h:

typedef struct {
int32_t digits;      /* Count of digits in the coefficient; >0    */
int32_t exponent;    /* Unadjusted exponent, unbiased, in         */
                     /* range: -1999999997 through 999999999      */
uint8_t bits;        /* Indicator bits (see above)                */
                     /* Coefficient, from least significant unit  */
decNumberUnit lsu[DECNUMUNITS]; // decNumberUnit is int16_t and DECNUMUNITS is 1
} decNumber;


Test.cpp:

decNumber a,b,c;


当我打印a,b和c的地址时,这就是我得到的:

a:0x7fff0d7a9858至0x7fff0d7a9864

b:0x7fff0d7a9864至0x7fff0d7a9870

c:0x7fff0d7a987c至0x7fff0d7a9888

a和b之间的0x7fff0d7a9864字节重叠有效吗?该程序最终会遇到分段错误。为什么?

任何帮助是极大的赞赏!

最佳答案

a和b之间的0x7fff0d7a9864字节重叠有效吗?


没有字节重叠。例如,0到5表示[0、1、2、3、4],5到10表示[5、6、7、8、9]。


  该程序最终会遇到分段错误。为什么?


不可能。问题中的程序不完整,无法编译。它不会导致分段错误,因为没有可以运行的程序。

关于c++ - 这是有效的内存对齐方式吗?如果没有,应该如何解决?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29017413/

10-11 18:24