前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >同级指针修饰内存失败以及解决方法

同级指针修饰内存失败以及解决方法

作者头像
大忽悠爱学习
发布2021-03-02 14:48:44
1340
发布2021-03-02 14:48:44
举报
文章被收录于专栏:c++与qt学习
在这里插入图片描述
在这里插入图片描述

此时p还没指向任何空间,直接解引用赋值会报错 如果要是地址传递应该传入&p,即p的地址

在这里插入图片描述
在这里插入图片描述

解决上述问题 方法1: 利用函数返回值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方法2:高级指针修饰低级指针 本质是地址传递,同级指针是值传递

在这里插入图片描述
在这里插入图片描述

问题1:如果在allocatespace函数里面释放了pp指针指向的内存空间,再p=2000会报错吗?

在这里插入图片描述
在这里插入图片描述

答案:会的

在这里插入图片描述
在这里插入图片描述

这里运行之所以没有报错,是因为这块内存虽然权限还给了操作系统,但还未拿给其他程序使用,因此我们依然可以操控这块内存

在这里插入图片描述
在这里插入图片描述

这里是值传递,因此p1置空,和p没有关系,有关系的只是两者指向的同一块内存被释放了

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void fun(int** p1)
{
	* p1 = (int*)malloc(sizeof(int));
}
void freeSpace(int* p1)
{
	if (p1 != NULL)
	{
		free(p1);
		p1 = NULL;
	}
}
void test()
{
	int* p = NULL;
	fun(&p);
	freeSpace(p);
	p = NULL;
	if (p != NULL)
	{
		printf("野指针");
	}
	else 
	{
		printf("空指针");
	}
}

int main()
{
	test();
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档