c语言实现malloc的内存不够了扩容
时间: 2024-03-18 12:16:24 浏览: 19
在C语言中,可以使用realloc函数来扩展动态内存分配的空间。realloc函数的原型为:
```
void *realloc(void *ptr, size_t size);
```
其中,ptr是之前使用malloc函数分配的内存空间的指针,size是需要扩展的内存大小。realloc函数会重新分配一块内存空间,并将ptr指向的内存内容复制到新的内存空间中。如果扩展内存成功,realloc函数会返回一个指向新内存空间的指针,否则返回NULL。
通常情况下,我们可以先使用malloc函数分配一块初始内存空间,然后在需要扩展内存时,使用realloc函数重新分配一块更大的内存空间,并将之前的数据复制到新的内存空间中。具体示例代码如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
// 初始内存大小
int init_size = 10;
// 分配初始内存空间
char *str = (char *) malloc(init_size * sizeof(char));
if (str == NULL) {
printf("malloc failed.\n");
return 1;
}
// 输入字符串
printf("Enter a string: ");
if (fgets(str, init_size, stdin) != NULL) {
// 如果输入的字符串超过了初始内存空间大小,则使用realloc函数扩展内存空间
if (str[strlen(str) - 1] != '\n') {
int new_size = init_size * 2;
char *new_str = (char *) realloc(str, new_size * sizeof(char));
if (new_str == NULL) {
printf("realloc failed.\n");
free(str);
return 1;
} else {
str = new_str;
fgets(str + init_size, init_size, stdin);
init_size = new_size;
}
}
printf("Input string is: %s\n", str);
}
// 释放内存空间
free(str);
return 0;
}
```
在上述示例代码中,我们使用fgets函数从标准输入中读取用户输入的字符串,如果输入的字符串长度超过了初始内存空间大小,则使用realloc函数扩展内存空间,并将新的字符串输入到扩展后的内存空间中。最后,释放内存空间并返回0表示程序正常结束。