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

2021-03-02 14:48:44 浏览数 (1)

此时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;
}

0 人点赞