在c语言中)使用malloc和realloc函数,观察内存地址变化情况
时间: 2024-09-11 22:10:23 浏览: 77
在C语言中,`malloc` 和 `realloc` 函数是用于动态内存分配的两个关键函数,它们分别用于申请内存和重新分配内存。
1. `malloc`(memory allocation)函数用于动态分配一块指定大小的内存区域。当调用`malloc`时,它会在堆上查找一块足够大的空闲内存区域,如果找到,就返回这块内存区域的指针(一个指向该内存起始地址的指针),否则返回`NULL`。`malloc`并不会将这块内存初始化,内存中的值是不确定的。
2. `realloc`(reallocation)函数用于重新分配之前用`malloc`、`calloc`或`realloc`分配的内存块。如果你需要更大的内存空间,`realloc`可以扩展已有的内存块,或者在需要的情况下移动内存块到新的位置。如果新的内存大小大于原先的大小,`realloc`可能会将内存块移动到新的位置,并返回新的内存块的指针;如果新的内存大小小于原先的大小,`realloc`可能会调整内存块的大小,保留原有数据。
观察内存地址变化的情况,通常需要在使用`malloc`和`realloc`前后打印指针变量的值。但是需要注意的是,因为内存分配和释放是动态的,所以每次程序运行时,即使是同样的分配过程,所得到的内存地址都可能不同。此外,由于操作系统的内存管理机制,连续的两次`malloc`可能会得到不连续的内存地址。
下面是一个简单的C语言代码示例,演示如何使用`malloc`和`realloc`,并打印内存地址的变化:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = malloc(sizeof(int)); // 分配内存,并打印地址
if (ptr == NULL) {
return -1;
}
printf("malloc allocated address: %p\n", (void*)ptr);
// 使用realloc来改变之前分配的内存大小
int *temp = realloc(ptr, 2 * sizeof(int));
if (temp == NULL) {
free(ptr); // 如果realloc失败,释放原来的内存
return -1;
}
ptr = temp; // 更新指针
printf("realloc allocated address: %p\n", (void*)ptr);
free(ptr); // 释放内存
return 0;
}
```
阅读全文