这个有效的内存对齐吗?如果没有,应该如何解决?

时间:2015-03-12 18:19:48

标签: c++ memory segmentation-fault alignment

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有效吗?该程序最终会遇到分段错误。为什么呢?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

  

a和b之间的字节是否重叠0x7fff0d7a9864?

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

  

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

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