社区
C语言
帖子详情
如何动态malloc申请内存空间?
亚细亚
2009-11-02 11:06:19
要获得一个动态字符串,不知道如何用malloc动态申请空间?
...全文
915
26
打赏
收藏
如何动态malloc申请内存空间?
要获得一个动态字符串,不知道如何用malloc动态申请空间?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
malloc
()到底如何
申请
内存空间
?
malloc
()到底从哪里得到了
内存空间
? 答案是从堆里面获得空间。也就是说函数返回的指针是指向堆里面的一块内存。 操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的
申请
时,就会遍历该链表,然后就...
malloc
申请
内存空间
malloc
申请
内存空间
,记录自己使用过的功能,可能介绍的内容不全面。 void *
malloc
(size_t size); 返回值是一个地址,指向你所分配给他的内存的地址。如果成功返回地址,失败则返回NULL。 功能:返回所
申请
的一段...
malloc
是如何分配内存的?
最近想多写一些内存管理的文章,这次我们就以
malloc
动态
内存分配为切入点,我在文中也做了小实验:
malloc
是如何分配内存的?
malloc
分配的是物理内存吗?
malloc
(1) 会分配多大的内存? free 释放内存,会归还...
malloc
申请
内存空间
失败
都提到失败的原因可能是因为之前
申请
的
内存空间
出现越界操作,致使
malloc
分配失败,自己得到了一些启示,回头查看了最近一次
malloc
申请
内存成功后的一些操作,最后调试发现就是最近一次
申请
的
内存空间
不足,...
动态
申请
内存空间
:C语言中的
malloc
函数
动态
申请
内存空间
可以为我们在实际编程中带来很大的灵活性,使我们能够
动态
地存储变量的数据。通过使用
malloc
callocrealloc和free等函数,我们可以在堆区
动态
地
申请
和释放
内存空间
,使得内存的使用更加高效和灵活。
C语言
70,020
社区成员
243,264
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章