bywfssl 2017-08-04 09:39 采纳率: 50%
浏览 1353
已采纳

c语言重新分配内存函数

realloc函数返回的指针是不是和改变大小前的指针的起始地址是一样的,只是结束地址因为大小改变了而不一样?
图中书上划线的地方(指向新地址)说的有问题吗?
我在以下程序中输出fDouble和iInt的值验证是一样的啊

 #include<stdio.h>
#include <stdlib.h>
int main()
{
    double *fDouble;                            /*定义实型指针*/
    float* iInt;                                /*定义整型指针*/
    fDouble=(double*)malloc(sizeof(double));    /*使用malloc函数分配实型空间*/
    printf("%d\n",fDouble);
    printf("%d\n",sizeof(*fDouble));            /*输出空间的大小*/
    iInt=(float *)realloc(fDouble,sizeof(float));   /*使用realloc改变分配空间大小*/
    printf("%d\n",iInt);
    printf("%d\n",sizeof(*iInt));
    return 0;
}
![![图片说明](https://img-ask.csdn.net/upload/201708/04/1501831647_646579.jpg)图片说明](https://img-ask.csdn.net/upload/201708/04/1501831333_593962.png)

图片说明

图片说明

  • 写回答

2条回答 默认 最新

  • 战在春秋 2017-08-04 23:18
    关注

    题目中的这个现象属于典型的 未定义行为 (undefined behavior),也称为不确定行为。

    realloc函数会根据传入的参数尝试重新分配内存,可能成功,也可能失败。
    即使成功,新分配的内存地址可能与之前的相同,也可能不相同。
    和内存对齐,编译器优化等很多因素有关。
    C++中未定义行为有很多,比如论坛中经常提问的 ++ -- 表达式求值问题也是如此。
    对于此类问题,最好的办法是参考C/C++标准和msdn。

    回到题目,我在visual studio 2015下测试,两者内存地址就是不相等的。

    图片说明

    如果对您有帮助,请采纳答案好吗,谢谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?