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