重要提示: 请勿将账号共享给其他人使用,违者账号将被封禁!
查看《购买须知》>>>
当前位置: 首页 > 大学网课 > 大学网课
网友您好, 请在下方输入框内输入要搜索的题目:
搜题

题目

[主观题]

分析下面的程序: void GetMemory(char **p,int num) { *p=(char *)malloc(num); } int main()

分析下面的程序:

void GetMemory(char **p,int num)

{

*p=(char *)malloc(num);

}

int main()

{

char *str=NULL;

GetMemory(&str,100);

strcpy(str,"hello");

free(str);

if(str!=NULL)

{

strcpy(str,"world");

}

printf("\n str is %s",str);

getchar();

}

问输出结果是什么?希望大家能说说原因,先谢谢了

答案
输出str is world。
free 只是释放的str指向的内存空间,它本身的值还是存在的.
所以free之后,有一个好的习惯就是将str=NULL.
此时str指向空间的内存已被回收,如果输出语句之前还存在分配空间的操作的话,这段存储空间是可能被重新分配给其他变量的,
尽管这段程序确实是存在大大的问题(上面各位已经说得很清楚了),但是通常会打印出world来。
这是因为,进程中的内存管理一般不是由操作系统完成的,而是由库函数自己完成的。
当你malloc一块内存的时候,管理库向操作系统申请一块空间(可能会比你申请的大一些),然后在这块空间中记录一些管理信息(一般是在你申请的内存前面一点),并将可用内存的地址返回。但是释放内存的时候,管理库通常都不会将内存还给操作系统,因此你是可以继续访问这块地址的,只不过。。。。。。。。楼上都说过了,最好别这么干
更多“分析下面的程序: void GetMemory(char **p,int num) { *p=(char *)malloc(num); } int main()”相关的问题

第1题

分析下面的Java代码,该程序的运行结果是()。class Example{public static void main(String[]

A. 17

B. 16

C. 13

D. 14

点击查看答案

第2题

下面的程序输出的结果是()。 #include <iostream> using namespace std; void main(){

下面的程序输出的结果是()。 #include <iostream> using namespace std; void main(){ int a=2; int &c=a; a++; cout<<c; }

A.2

B.3

C.4

D.*a

点击查看答案

第3题

下面的程序能正确运行吗 public class NULL { public static void haha(); } }

A.能

B.不能

点击查看答案

第4题

请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。 int x = 10; void main(); }
点击查看答案

第5题

下面的程序段违反了算法的(52)原则。 void sam() {int n=2: while

下面的程序段违反了算法的(52)原则。 void sam() {int n=2: while (!odd (n)) n+=2; printf (n); }

A.有穷性

B.确定性

C.可行性

D.健壮性

点击查看答案

第6题

分析下面的Java代码,该程序的运行结果是()。class Check{public static void main(String args

A. 打印输出0

B. 打印输出1

C. 打印输出2

D. 打印输出3

点击查看答案

第7题

执行下面的程序段,输出结果为______。public class Q{public static void main(String argvr)){in

执行下面的程序段,输出结果为______。

public class Q

{

public static void main(String argvr))

{

int anar[]=new int[5];

System.out.println(anar[0]);

}

}

点击查看答案

第8题

下面的程序输出结果是()。#include<iostream>using namespace std;void add(){static int x;x++;c

下面的程序输出结果是()。 #include<iostream> using namespace std; void add() { static int x; x++; cout<<x<<''; } int main() { for(int i=0;i<3;i++) add(); return 0; }

A.111

B.123

C.222

D.333

点击查看答案

第9题

下面的程序输出结果是 ______。#define r 16#if r==16void p(int a){printf("%x",a) ;}#elsevoid

下面的程序输出结果是 ______。 #define r 16 #if r==16 void p(int a) { printf("%x",a) ; } #else void p(int a) { printf("%d",a) ; } #endif main() { p(32); }

A.32

B.20

C.编译时错误

D.运行时错误

点击查看答案

第10题

下面的程序段违反了算法的(2)原则。 Void sam() {int n=2; while(!odd(n)) n+=2 pri

下面的程序段违反了算法的(2)原则。 Void sam() {int n=2; while(!odd(n)) n+=2 printf(n); }

A.有穷性

B.确定性

C.可行性

D.健壮性

点击查看答案

第11题

下面的程序中,错误的语句是()。 ①inClude②void main ③{ ④ int *p=new int[1]; ⑧P=9; ⑥c

下面的程序中,错误的语句是()。 ①inClude

②void main ③{ ④ int *p=new int[1]; ⑧P=9; ⑥cout<<.*P<<endl; ⑦delete[]p; ⑧}

A.④

B.⑤

C.⑥

D.⑦

点击查看答案
赏学吧APP
TOP
重置密码
账号:
旧密码:
新密码:
确认密码:
确认修改
购买搜题卡查看答案
购买前请仔细阅读《购买须知》
请选择支付方式
微信支付
支付宝支付
点击支付即表示你同意并接受《服务协议》《购买须知》
立即支付
搜题卡使用说明

1. 搜题次数扣减规则:

功能 扣减规则
基础费
(查看答案)
加收费
(AI功能)
文字搜题、查看答案 1/每题 0/每次
语音搜题、查看答案 1/每题 2/每次
单题拍照识别、查看答案 1/每题 2/每次
整页拍照识别、查看答案 1/每题 5/每次

备注:网站、APP、小程序均支持文字搜题、查看答案;语音搜题、单题拍照识别、整页拍照识别仅APP、小程序支持。

2. 使用语音搜索、拍照搜索等AI功能需安装APP(或打开微信小程序)。

3. 搜题卡过期将作废,不支持退款,请在有效期内使用完毕。

请使用微信扫码支付(元)
订单号:
遇到问题请联系在线客服
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系在线客服
恭喜您,购买搜题卡成功 系统为您生成的账号密码如下:
重要提示: 请勿将账号共享给其他人使用,违者账号将被封禁。
发送账号到微信 保存账号查看答案
怕账号密码记不住?建议关注微信公众号绑定微信,开通微信扫码登录功能
警告:系统检测到您的账号存在安全风险

为了保护您的账号安全,请在“赏学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!

- 微信扫码关注赏学吧 -
警告:系统检测到您的账号存在安全风险
抱歉,您的账号因涉嫌违反赏学吧购买须知被冻结。您可在“赏学吧”微信公众号中的“官网服务”-“账号解封申请”申请解封,或联系客服
- 微信扫码关注赏学吧 -
请用微信扫码测试
温馨提示
每个试题只能免费做一次,如需多次做题,请购买搜题卡
立即购买
稍后再说
赏学吧