指针使用常见错误:
1 指针变量未初始化
void main()
{
int *p;// int *p = NULL;
指针与二维数组 *p = 5;
printf("^%d\n", *p);
return;
}
2 对指针进行动态内存分配后,要检查是否分配成功
int *p = NULL;
p1 = (int *)malloc( N * sizeof(int));
if(NULL == p)
return -1;
*p = 10;
或者:
int *p1 = NULL;
if( !(p1 = (int *)malloc( sizeof(int)) ) )
return -1;
3 指针所指内容使用完free掉后,需把指针也置空 => 野指针
对应地,指针置空前要先free => 内存泄露
#include <stdio.h>
#include <stdlib.h>
int main()
{
//定义p1,并分配动态内存及赋初值
int *p1 = NULL;
if( !(p1 = (int *)malloc( sizeof(int)) ) )
return -1;
*p1 = 5;
//free
free(p1);
// p1 = NULL;
//定义p2,并动态分配内存及赋初值
int *p2 = NULL;
if( !(p2 = (int *)malloc( sizeof(int)) ) )
return -1;
*p2 = 100;
//考察p1指向的内存
printf("%d\n", *p1);
return 0;
}
/*
运行结果:
___________________________________________________
100
请按任意键继续. . .
___________________________________________________
*/
4 指针使用前,进行判空操作
例如调用函数时,实参向形参传入一个指针值,在被调函数中必须检查传入指针是否为NULL
5 指向结构体的指针的释放问题
typedef struct student
{
char* name;
int age;
}student;
void function()
{
student * p = NULL;
if( !(p = (student *)malloc( sizeof(student)) ) )
return -1;
if( !( s->name = (char *)malloc( 20 * sizeof(char)) ) )
return -1;
age = 15;
free(p);
p = NULL;
}
6 不能返回栈内存
int *p()
{
int i=0;
return &i;
}
-------------------------------------
void func(int **pp)
{
int i = 0;
*pp = &i;
return;
}
void main()
{
int *p = NULL;
func(&p);
return;
}
7 修改形参指针的值,误以为对实参指针进行了修改
8 若指针指向字符串,不能用指针改变字符串
char *p = "abcd";
*(p + 1) = 'x';
9 指针操作数组引起的内存越界
-------------------------------------
void sum(int p[])
{
//实现求和
return;
}
void main()
{
int num[5] = {1, 2, 3, 4, 5};
// char str[] = “abcd”;
func(num);
return;
}
10 指针操作二维数组
11 指针操作链表
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论