当有如下定义char *p=(char *)malloc(100);则p被分配到()中A.栈 B.堆 C.全局初始化区 D.以上说法均不对====求教大侠解释
关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率

首页/
已采纳
C语言char *p=(char *)malloc(100)
收起
- 写回答
- 好问题 0 提建议
- 关注问题
微信扫一扫
点击复制链接分享
- 邀请回答
- 编辑 收藏 删除 结题
- 收藏 举报
3条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
youngbulls 2015-12-03 02:39关注一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack) 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
3、全局区(静态区)(static),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区 ?常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区?存放函数体的二进制代码。
二、例子程序
这是一个前辈写的,非常详细
//main.cpp
int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; 栈
char s[] = "abc"; 栈
char *p2; 栈
char *p3 = "123456"; 123456/0在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456"); 123456/0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
}网上别人总结的 自己巩固一下 也替你解答下问题
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 2无用举报微信扫一扫
点击复制链接分享
编辑预览轻敲空格完成输入- 显示为
- 卡片
- 标题
- 链接
评论按下Enter换行,Ctrl+Enter发表内容
编辑
预览

轻敲空格完成输入
- 显示为
- 卡片
- 标题
- 链接
报告相同问题?
提交
- 2016-08-18 19:35回答 4 已采纳 用memcpy,或者 typedef unsigned char BYTE; char* bufheader; //bufheader = (char )malloc(sizeof(char)
- 2022-07-21 10:12回答 1 已采纳 这条考得比较细节:首先,程序因为死循环会一直运行下去;然后,在不断的申请内存中导致内存耗尽;最后,申请内存失败,返回0,向该地址写入数据,产生异常,退出程序。
- 2022-01-07 09:37回答 1 已采纳 (1)需要给Name申请空间(2)字符串的赋值需要用strcpy代码修改如下: char* name[5]={"故宫博物院","黄山风景名胜区","颐和园","泰山","四川九寨沟"}; struct
- 2021-05-21 04:36陆zz的博客 全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); 分配得来得10和20字节的区域就在堆区。 strcpy(p1, "123456"); 123456/0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个...
- 2021-03-09 01:54回答 1 已采纳 typedef struct Node { char data; struct Node*next; }Node,*LinkList; Node:可以使用他定义结构体; Node *:可以使
- 2021-08-26 13:10回答 1 已采纳 这是个死循环,程序一直通过malloc申请内存,肯定会引起内存耗尽。然后malloc分配内存失败,返回NULL指针,"*p=0"这行试图向NULL指针写入数据,进而引起程序终止(通常操作系统会因为“段
- 2022-07-06 06:51回答 3 已采纳 你只是给指针的指针分配了空间,但里面的每个指针都是空的啊另外devices[connectCount]=(void *)&DevKey这么写也是不行的,DevKey是函数内的局部变量,当函数结束后,内
- 2021-05-20 03:04优普艺考的博客 题目想要通过一个函数来创建一个字符串数组: 首先,这个想法是可以实现的;其次,题目中的形参有误,导致p指针没有变化。...p)// char *p就是错的,因为p没有传出来{p=(char*)malloc(100);//p = new char[100]...
- 2023-03-08 01:16回答 2 已采纳 “Devil组”引证GPT后的撰写:凑合看: +------------------+ | 菜单 | +------------------+ |
- 2013-08-10 16:21回答 6 已采纳 **f(b) { free(b); } if(c) { free(c); } 因为b 和 c 都初始化存储的a 开辟空间的地址,所以都不为空,程序运行中,执行 释放b,c所指地址
- 2021-07-24 11:59回答 1 已采纳 参考: char *Ptr = NULL; Ptr = (char *)malloc(100 * sizeof(char)); if (NULL == Ptr)
- 2023-04-22 09:34SSXXi的博客 正确答案: void getmemory( char **p ) //*p改为**p,形参也要设置为二级指针即**p,&str通过地址传递给**p { *p = (char *) malloc( 100 ); //p改为*p } void test( void ) { char *str = NULL; getmemory( &str )...
- 2021-09-03 07:42dodod2012的博客 char []定义的是一个字符数组,注意强调是数组。 char * 定义的是一个字符串指针,注意强调是指针。 char *s定义了一个char型的指针,它只知道所指向的内存单元,并不知道这个内存单元有多大,所以: 当char *s =...
- 2022-09-02 13:59努力奔跑的小龟的博客 运行结果 DEVC++ Linux gcc 原因 运行结果会出现断错误,原因在于, char *str=“Hello world” 这句仅仅声明了一个指针变量,指向字符串"Hello world",而"Hello world"这个字符串程序没有给它分配空间,编译器把它分配...
- 2018-03-13 08:32zhgeliang的博客 char *get_string_1(){char p[] = "hello world!";return p;}char *get_string_2(){char *p = "hello world!";return p;}int main(){char *p;p = get_string_1();printf("g...
- 没有解决我的问题, 去提问
联系我们(工作时间:8:30-22:00)
400-660-0108kefu@csdn.net在线客服
- 京ICP备19004658号
- 经营性网站备案信息
公安备案号11010502030143
- 营业执照
- 北京互联网违法和不良信息举报中心
- 家长监护
- 中国互联网举报中心
- 网络110报警服务
- Chrome商店下载
- 账号管理规范
- 版权与免责声明
- 版权申诉
- 出版物许可证
- ©1999-2025北京创新乐知网络技术有限公司