社区
C语言
帖子详情
如何动态malloc申请内存空间?
亚细亚
2009-11-02 11:06:19
要获得一个动态字符串,不知道如何用malloc动态申请空间?
...全文
904
26
打赏
收藏
如何动态malloc申请内存空间?
要获得一个动态字符串,不知道如何用malloc动态申请空间?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
鼠
2009-11-03
打赏
举报
回复
[Quote=引用 21 楼 gkke1983 的回复:]
c语言中要么知道分配大小,要么重新分配;
c++中的容器可以解决你的问题,参看C++ Primer 3rd.
[/Quote]
补充一下:容器也就是把重新分配的操作封装了,重新分配这个过程还是少不了的。
gkke1983
2009-11-03
打赏
举报
回复
c语言中要么知道分配大小,要么重新分配;
c++中的容器可以解决你的问题,参看C++ Primer 3rd.
bomeng_21it
2009-11-03
打赏
举报
回复
[Quote=引用 5 楼 thefirstz 的回复:]
char *p = (char *)malloc(strlen(str) + 1);
...
free(p);
[/Quote]
记得最后还得:
p=NULL;
hewanli0420
2009-11-03
打赏
举报
回复
这是关于malloc的详解
malloc 原型:extern void *malloc(unsigned int num_bytes);
用法:#include <malloc.h>
或#include<stdlib.h>
功能:用于向内存申请空间,分配长度为num_bytes字节的内存块
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
调用格式,
指针名=(指针所指对象的数据类型*)malloc(个数*sizeof(指针所指对象的数据类型)),其对应例子如下:
int *p = (int *) malloc ( n* sizeof(int) );
举例:
// malloc.c
#include <syslib.h>
#include <malloc.h>
main()
{
char *p;
clrscr(); // clear screen
p=(char *)malloc(100);
if(p)
printf("Memory Allocated at: %x",p);
else
printf("Not Enough Memory!\n");
if(p)
free(p);
getchar();
return 0;
}
Zijian_Zhang
2009-11-03
打赏
举报
回复
[Quote=引用 11 楼 yaxiya 的回复:]
引用 9 楼 tadican 的回复:
引用 6 楼 yaxiya 的回复:
如果字符串长度大于1000,而实际只申请了1000,回出现什么问题吗?
运气不好的话,你可能会把不属于你的部分空间覆盖掉,会破坏堆的结构,系统会强迫你的程序退出。
怎么才能既不浪费空间,又能够存放下动态字符串?
[/Quote]
看10楼。
cutestar
2009-11-03
打赏
举报
回复
使用malloc后要检查返回的指针是不是为NULL
char *p = (char*)malloc(1000);
if(p == NULL){ //如果分配过大,系统找不到这么大的内存或是其它原因
// 内存分配错误处理
}
memset(p, NULL, 1000); // 有的编译器在malloc后会初始化为NULL
最后要释放
free(p); p = NULL;
p在使用过程中,最好不要修改其地址.如在遍历时:
for(; p != '\0' ; p++){...}
应该用另外一个指针来遍历:
for(char *pa = p; pa != '\0'; pa++){...}
如:
char *pa = p;
for(; p != '\0'; p++){...}
free(pa);
这样容易引起混乱..
亚细亚
2009-11-02
打赏
举报
回复
[Quote=引用 9 楼 tadican 的回复:]
引用 6 楼 yaxiya 的回复:
如果字符串长度大于1000,而实际只申请了1000,回出现什么问题吗?
运气不好的话,你可能会把不属于你的部分空间覆盖掉,会破坏堆的结构,系统会强迫你的程序退出。
[/Quote]
怎么才能既不浪费空间,又能够存放下动态字符串?
HelloCChao
2009-11-02
打赏
举报
回复
那种使用动态链表吧,一个字母一个字母地挂到链表上,不管字符串有多长,一个字母申请一个节点的内存。
直到最后你机器的内存用完了。。。
TADICAN
2009-11-02
打赏
举报
回复
[Quote=引用 6 楼 yaxiya 的回复:]
如果字符串长度大于1000,而实际只申请了1000,回出现什么问题吗?
[/Quote]
运气不好的话,你可能会把不属于你的部分空间覆盖掉,会破坏堆的结构,系统会强迫你的程序退出。
norahsmile
2009-11-02
打赏
举报
回复
先malloc一段空间。然后再使用realloc,函数原型:void *realloc(void *block, size_t size)给一个已分配的指针block重新内存,大小为size,返回重新分配的内存指针,NULL-分配失败。
ArmStronger
2009-11-02
打赏
举报
回复
[Quote=引用 6 楼 yaxiya 的回复:]
如果字符串长度大于1000,而实际只申请了1000,回出现什么问题吗?
[/Quote]
那是肯定出问题啦,超出的内存不能访问
亚细亚
2009-11-02
打赏
举报
回复
如果字符串长度大于1000,而实际只申请了1000,回出现什么问题吗?
昵称很不好取
2009-11-02
打赏
举报
回复
char *p = (char *)malloc(strlen(str) + 1);
...
free(p);
Caballeroo
2009-11-02
打赏
举报
回复
记得最后free()以免造成内存泄露!
ArmStronger
2009-11-02
打赏
举报
回复
申请100个空间
char *p = (char*)malloc(sizeof(char)*100);
pengzhixi
2009-11-02
打赏
举报
回复
看1L
珍惜生命远离CPP
2009-11-02
打赏
举报
回复
char* p = (char*)malloc( 1000 );
zishan169
2009-11-02
打赏
举报
回复
[Quote=引用 7 楼 cfz379945430 的回复:]
引用 6 楼 yaxiya 的回复:
如果字符串长度大于1000,而实际只申请了1000,回出现什么问题吗?
那是肯定出问题啦,超出的内存不能访问
[/Quote]
超出的一般情况下还是可以访问的,只是把别人家的空间占用了,横行霸道了
selooloo
2009-11-02
打赏
举报
回复
定义个字符指针,char *p;
用strlen()或sizeof()计算字符串大小,比如是N;
分配空间p=(char *)malloc(N*sizeof(char));
用完把p空间释放free(p);
用的时候再申请
leopardaa521
2009-11-02
打赏
举报
回复
free(p)是释放的p指向的空间而不是释放的p
所以最后再令p=NULL;
加载更多回复(6)
Windows内核-内存管理
- 堆,栈这些内存是怎么
申请
的 - Windows内核情景分析 第三章 - 不管什么程序,除了程序代码本身所占用的空间外,程序在运行过程中总得使用一定的
内存空间
,因为数据也要占用空间。这些存储...
malloc
申请
内存空间
malloc
申请
内存空间
,记录自己使用过的功能,可能介绍的内容不全面。 void *
malloc
(size_t size); 返回值是一个地址,指向你所分配给他的内存的地址。如果成功返回地址,失败则返回NULL。 功能:返回所
申请
的一段...
malloc
申请
内存空间
失败
都提到失败的原因可能是因为之前
申请
的
内存空间
出现越界操作,致使
malloc
分配失败,自己得到了一些启示,回头查看了最近一次
malloc
申请
内存成功后的一些操作,最后调试发现就是最近一次
申请
的
内存空间
不足,...
malloc
()到底如何
申请
内存空间
?
malloc
()到底从哪里得到了
内存空间
? 答案是从堆里面获得空间。也就是说函数返回的指针是指向堆里面的一块内存。 操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的
申请
时,就会遍历该链表,然后就...
malloc
是如何分配内存的?
最近想多写一些内存管理的文章,这次我们就以
malloc
动态
内存分配为切入点,我在文中也做了小实验:
malloc
是如何分配内存的?
malloc
分配的是物理内存吗?
malloc
(1) 会分配多大的内存? free 释放内存,会归还...
C语言
69,335
社区成员
243,078
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章