指针使用常见错误:
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小时内删除。