5.3作业

本文介绍了C语言中函数指针的应用,如*s[10](int)类型,队列操作(如quelen变量更新),以及内存管理的最佳实践,包括内存分配、返回局部数组地址和大/小端字节序的区别。同时讨论了内存泄漏和栈空间释放的问题。
摘要由CSDN通过智能技术生成

1.int (*s[10])(int)表示s是一个数组,含有10个元素,每个元素都是一个函数指针,参数为int,返回值为int。

2.(1)C

        (2)A

        (3)C

        (4)E,D

        (5)B

3.  7,10

4,(1)quelen=m

     (2)quelen=0

     (3)队头位置=(rear−quelen+1+m)%m

        给定的值是 m=40rear=13quelen=19

  位置为25

  (4)队头位置=((rear−quelen)+m)%m

5.PDPPDPDD

6.10.001<X<29.999

7.页面大小=2^页内偏移位数=2^12=4096字节

    页表数量=2^页目录号位数=2^10=1024页

8.    (sizeof(array) / sizeof((array)[0]))

9.在大端字节顺序中,一个多字节值的高位字节(最高位)存放在最低的内存地址处,而低位字节(最低位)存放在最高的内存地址处。这种排列方式类似于书的阅读习惯,从左到右,从高到低。

在小端字节顺序中,一个多字节值的低位字节存放在最低的内存地址处,而高位字节存放在最高的内存地址处。这种排列方式与大端相反,即从最低位开始存储。

10.左:(1)在 GetMemory 函数中,分配了内存但没有返回它。没有检查 malloc 是否成功分配了内存

(2)这会导致运行时错误,因为虽然内存被分配了,但是没有将其返回给调用者,导致 Test 函数中的 str 指针仍然为 NULL

 (3)void Test(void) { char *str = NULL; str = GetMemory(str); // GetMemory 应返回分配的内存

           if (str == NULL) { // 处理内存分配失败的情况

                          return; }

          strcpy(str, "hello world"); 

          printf("%s\n", str); // 正确打印字符串

           free(str); // 释放分配的内存 }

      右:(1)在 GetMemory 函数中,返回了一个局部数组的地址  char p[] = "hello world"; return p;

     (2)由于 p 是一个局部数组,其声明周期仅限于 GetMemory 函数的执行过程中。当函数返回后,p 所占用的栈空间将被释放,指向了一块已经不再分配给该指针的内存区域。

     (3)char *GetMemory(void) { char *p = malloc(12);

                if (p == NULL) {

                 return NULL; }

                strcpy(p, "hello world");

                return p; }

void Test(void) { char *str = GetMemory();

                if (str != NULL) { printf("%s\n", str);

                free(str); // 释放内存 } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值