jhanker 发表于 2022-10-5 14:28:26

C语言堆内存块的重分配演示 malloc, realloc

#include<stdio.h>
/*#include<malloc.h>*/
#include<stdlib.h>

int main()
{
        int i ,* temp;
        const int size = 20;

        int *p = (int *)malloc(5 * sizeof(int));
        temp=p;
        printf("malloc后指向地址%x\n", temp);
        for (i=0;i<5;temp++,i++)
        {
                *temp=0xaabbccdd;
        }
        temp=p;
        i=0;
        printf("p内容%x ", *temp);
        temp++;
        for (i=1;i<5;temp++,i++)
        {
                printf("%x ", *temp);
        }
        temp=p;
        int *p1 = (int *)realloc(p, size*sizeof(int));
        printf("\nrealloc后p指向地址%x\n", p);

        i=0;
        printf("p内容%x ", *temp);
        temp++;
        for (i=1;i<5;temp++,i++)
        {
                printf("%x ", *temp);
        }
    temp=p1;
        printf("\nrealloc后p1指向地址%x\n", p1);
        i=0;
        printf("p1内容%x ", *temp);
        temp++;
        for (i=1;i<10;temp++,i++)
        {
                printf("%x ", *temp);
        }
    // free(p); 在 int *p1 = (int *)realloc(p, size*sizeof(int)); 如果执行该语句会编译出错,由于地址已经改变,原来的p指向空间再执行realloc时已经回收
    free(p1);
        system("pause");
        return 0;
}

howzyao 发表于 2022-10-5 14:35:45

这个太好了,正是需要的.
只是好奇你如何得知此地址是空的,怎么可以直接使用,

jhanker 发表于 2022-10-5 14:39:34

howzyao 发表于 2022-10-5 14:35
这个太好了,正是需要的.
只是好奇你如何得知此地址是空的,怎么可以直接使用,

用vC6.0调试可以看到,你要了解堆的分配块,看一看我的贴 https://fishc.com.cn/thread-212610-1-3.html

jhanker 发表于 2022-10-5 14:41:12

howzyao 发表于 2022-10-5 14:35
这个太好了,正是需要的.
只是好奇你如何得知此地址是空的,怎么可以直接使用,

当时发的那个关于堆的贴,出60鱼币都几乎没人看

jhanker 发表于 2022-10-5 14:47:15

howzyao 发表于 2022-10-5 14:35
这个太好了,正是需要的.
只是好奇你如何得知此地址是空的,怎么可以直接使用,

如果用VC6.0调试函数的调用的过程,对学习C语言更有好处
VC6.0及插件下载:https://fishc.com.cn/thread-201726-1-1.html

jhanker 发表于 2022-10-14 22:14:00

堆的知识看
https://fishc.com.cn/thread-212610-1-1.html

竹逸 发表于 2022-10-19 23:51:44

学习学习

jhanker 发表于 2022-10-29 17:59:28

竹逸 发表于 2022-10-19 23:51
学习学习

这写内容对初学者有点难

jhanker 发表于 2023-4-29 18:43:47

这可是好东西哦
页: [1]
查看完整版本: C语言堆内存块的重分配演示 malloc, realloc