现在的位置: 首页 > 综合 > 正文

c++变量莫名其妙改变_内存覆盖

2019年04月16日 ⁄ 综合 ⁄ 共 398字 ⁄ 字号 评论关闭

 内存覆盖是个很简单又很隐蔽的错误。如果在程序中发现某个数组a的一些结果被莫名奇妙改写了,但你可以很肯定你没有在代码中修改它们。很有可能内存被不小心覆盖了。例如:

    int b[100];

    int a[100];

   int c=102;

    b[c]=5;

   与数组a相邻的数组b不够大,开了b[100],程序中不小心给越界的b[102]赋值,那么就有可能造成数组a中间一些数值被覆盖(当然也可能有其他问题,如程序崩溃)。

    malloc()函数也可能导致类似的错误。如果函数的实参为 sizeof(int) ,用于生成一个整型数据需要的大小。如果你写成:  int* p = (int *) malloc (1);  代码也能通过编译,但事实上只分配了1个字节大小的内存空间,当你往里头存入一个整数,就会有3个字节无家可归,而直接住进邻居家!造成的结果是后面的内存中原有数据内容被改写。 

抱歉!评论已关闭.