博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(原創) 如何重新動態配置記憶體空間? (C/C++) (C)
阅读量:7088 次
发布时间:2019-06-28

本文共 865 字,大约阅读时间需要 2 分钟。

Problem

C++里我NEW了一個CHAR[10]  後來發現不購大  想加大空間 而不損害原來的內容怎麽辦?
Solution
使用realloc()重新配置記憶體大小,類似VB的redim()。
header : stdlib.h
signature : void* realloc(void* pmem, size_t size);
pmem : 一個pointer,指向已經配置出去的記憶體區塊
size : 新的記憶體空間大小(byte)
Sample Code

ContractedBlock.gif
ExpandedBlockStart.gif
ExpandedBlockStart.gifContractedBlock.gif/**//* 
InBlock.gif(C) OOMusou 2007 
http://oomusou.cnblogs.com
InBlock.gif
InBlock.gifFilename    : realloc.cpp
InBlock.gifCompiler    : Visual C++ 8.0 / BCB 6.0 / gcc 3.4.2 / ISO C++
InBlock.gifDescription : Demo how to reallocate char
InBlock.gifRelease     : 05/26/2007 1.0
ExpandedBlockEnd.gif
*/
None.gif#include 
"stdio.h"
None.gif#include 
"stdlib.h"
None.gif#include 
"string.h"
None.gif
ExpandedBlockStart.gifContractedBlock.gif
int main() dot.gif{
InBlock.gif  
char* s = (char*)malloc(11);
InBlock.gif  memset(s, 
'a'10);
InBlock.gif  
// end of s
InBlock.gif
  s[10= 0;
InBlock.gif  printf(
"s=%s,length=%d\n",s,strlen(s));
InBlock.gif  
InBlock.gif  
// reallocate size of s
InBlock.gif
  s = (char*)realloc(s,21);
InBlock.gif  memset(s 
+ 10'b'10);
InBlock.gif  s[
20= 0;
InBlock.gif  printf(
"s=%s,length=%d\n",s,strlen(s));
InBlock.gif  
InBlock.gif  free(s);
ExpandedBlockEnd.gif}

執行結果

None.gif
s
=
aaaaaaaaaa
,
length
=
10
None.gifs
=
aaaaaaaaaabbbbbbbbbb
,
length
=
20

Reference
日向俊二,C/C++辭典,博碩文化,2002

转载地址:http://oyfql.baihongyu.com/

你可能感兴趣的文章
Android Studio IDE的 LogCat如何过滤指定应用的调试信息
查看>>
23个常用正则表达式(数值和字符串)
查看>>
struts2中struts.xml配置文件详解
查看>>
Javascript中的with用法
查看>>
GIS-008-ArcGIS JS API 全图
查看>>
js splice方法
查看>>
Linux--多网卡的7种Bond模式
查看>>
ADO 连接数据库,取到VT_DATE型日期转换成 int型
查看>>
properties 配置文件中值换行的问题
查看>>
Azure 部署 Asp.NET Core Web App
查看>>
Masonry和FDTemplateLayoutCell 结合使用示例Demo
查看>>
linux 切换用户之后变成-bash-x.x$的解决方法
查看>>
用备份控制文件做不完全恢复下的完全恢复(数据文件备份<旧>--新建表空间--控制文件备份<次新>--日志归档文件<新>)...
查看>>
python下RSA加密解密以及跨平台问题
查看>>
详解Java Spring各种依赖注入注解的区别
查看>>
android 区分wifi是5G还是2.4G(转)
查看>>
多个构造器参数使用构建器
查看>>
模板方法模式(Template Method)
查看>>
创建预编译头 Debug 正常 Release Link Error:预编译头已存在,使用第一个 PCH
查看>>
asp.net上传文件夹权限配置以及权限配置的分析
查看>>