- 本文核心思想:只定义指针不赋值是不会给这个指针分配内存的
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
int tst_func(char **a)
{
*a = (char *)malloc(6);
if(!(*a))
{
printf("%d:-------malloc fail---------.\r\n", __LINE__);
return -1;
}
}
int main(int argc, char **argv)
{
char **a;
tst_func(a);
return 0;
}
- 编译无错,运行报错
$ gcc pointer.c -o pointer
$ ./pointer
Segmentation fault (core dumped)
$
-
因为主函数中仅仅定义了一个二级指针 a ,此时未给它分配内存,
子函数调用时却直接向a中(也就是一个不存在的内存)放了个一级指针
所以报错 -
改进
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
int tst_func(char **a)
{
*a = (char *)malloc(6);
if(!(*a))
{
printf("%d:-------malloc fail---------.\r\n", __LINE__);
return -1;
}
}
int main(int argc, char **argv)
{
char *a;
tst_func(&a);
return 0;
}