C语言习题~day27

1.关于下面代码描述不正确的是:

cpp 复制代码
void GetMemory(char *p)
{
	p = (char *)malloc(100);
}
void Test(void)
{
	char *str = NULL;
	GetMemory(str);
	strcpy(str, "hello world");
	printf(str);
}

A.上面代码没问题

B.上面代码存在内存泄露

C.上面代码可能会崩溃,即使GetMemory函数返回,str依然为NULL

D.GetMemory函数无法把malloc开辟的100个字节带回来

BCD已经说明了问题。核心问题就是子函数中的p是临时变量,改变它并不会改变主函数中的str。

2.以下哪个不是动态内存的错误( )

A.free参数为NULL

B.对非动态内存的free释放

C.对动态内存的多次释放

D.对动态内存的越界访问

这个题目是课本上的知识点

A选项,是对的,free函数传递NULL指针,什么事情都不发生

B,C,D都是错误的

3.关于下面代码描述正确的是( )

cpp 复制代码
char *GetMemory(void)
{
	char p[] = "hello world";
	return p;
}
void Test(void)
{
	char *str = NULL;
	str = GetMemory();
	printf(str);
}

A.printf函数使用有问题

B.程序正常打印hello world

C.GetMemory函数返回的地址无法正常使用

D.程序存在内存泄露

说明:此题考的是"局部变量的指针不能做返回值,因为函数内的空间在函数返回后就会释放调"这一点。只有C说到点子上了。

A:printf函数的使用也是错误的, 如果要打印printf("%s", str); 这个是str指针是正常的情况下, 是可以的。 如果str是非法的, 那也会导致printf错误的

B选项:打印结果其实是不确定的。

D选项: 比较离谱,程序中并没有动态内存分配,所以不存在内存泄漏。
4.给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans ,数组下标 从 0 开始计数 ,对于所有 0 <= i < ni ,满足下述所有要求:

  • ans[i] == nums[i]
  • ans[i + n] == nums[i]

具体而言,ans 由两个 nums 数组 串联 形成。

返回数组ans

cpp 复制代码
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* getConcatenation(int* nums, int numsSize, int* returnSize) {
    //定义一个长度为nums数组长度两倍的数组ans
    int* ans = malloc(2*numsSize * sizeof(int));
    int i = 0;
    //遍历nums数组,将下标为x的元素分别赋值给ans数组中下标为x和下标为x+m的元素;
    for(i=0; i<numsSize; i++) {
        ans[i] = nums[i];
        ans[i+numsSize] = nums[i];
    }
    //更新数组长度并返回数组
    *returnSize = 2*numsSize;
    return ans;
}

5.使用malloc函数模拟开辟一个二维数组

使用malloc函数模拟开辟一个3*5的整型二维数组,开辟好后,使用二维数组的下标访问形式,访问空间。

cpp 复制代码
#include <stdio.h>


int main()
{
	//开辟
	int** p = (int**)malloc(3 * sizeof(int*));
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		p[i] = (int*)malloc(5 * sizeof(int));
	}
	//使用
	int j = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 5; j++)
		{
			p[i][j] = 5 * i + j;
		}
	}
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 5; j++)
		{
			printf("%d ", p[i][j]);
		}
		printf("\n");
	}
	for (i = 0; i < 3; i++)
	{
		free(p[i]);
	}
	free(p);
	p = NULL;


	return 0;
}
相关推荐
小七在进步3 分钟前
数据结构:线性表之单链表
c语言·数据结构
MicroTech202517 分钟前
量子隐形传态路线的瓶颈与突破,微算法科技(MLGO)以技术创新助力量子通信长距离组网
科技·算法·量子计算
洛水水17 分钟前
【力扣100题】89.下一个排列
数据结构·算法·leetcode
洛水水18 分钟前
【力扣100题】90.寻找重复数
算法·leetcode·职场和发展
鱼子星_24 分钟前
【数据结构】排序的拓展——快速排序的生态多样性与归并排序沾染文件操作
c语言·数据结构·算法
alphaTao24 分钟前
LeetCode 每日一题 2026/6/8-2026/6/14
算法·leetcode
KaMeidebaby29 分钟前
卡梅德生物技术快报|噬菌体展示文库构建全流程解析 | 大豆球蛋白纳米抗体筛选实践
人工智能·python·tcp/ip·算法·机器学习
kkkAloha35 分钟前
链表解题总结
数据结构·链表
CC数学建模36 分钟前
2026年第十六届APMCM 亚太地区大学生数学建模竞赛(中文赛项)赛题B题:高性能芯片热管理系统的优化问题完整思路、代码、模型、文章,全网首发高质量分享!
python·算法·数学建模
爱睡懒觉的焦糖玛奇朵1 小时前
【视觉检测之人员奔跑检测算法开发思路】
人工智能·python·深度学习·算法·yolo·视觉检测