美文网首页
C指针(8):安全和误用

C指针(8):安全和误用

作者: miamendax | 来源:发表于2020-06-07 16:28 被阅读0次

安全和误用

1.声明和初始化

//1.错误的声明
int* ptr1,ptr2;

//正确声明
int *ptr1,*ptr2
//OR
#define PINT int*
PINT ptr1,ptr2;
//OR
typedef int* PINT;
PINT ptr1,ptr2;

//2.处理未初始化的指针
//NULL
int* ptr = NULL;
//assert函数,指针为空程序中止
assert(ptr != NULL)

2.缓冲区溢出

//1.malloc一定要检查返回值
float *vector = malloc(20 * sizeof(float));
if(vector == NULL) {
    // malloc分配内存失败
} else { 
    // 处理vector 
}

//2.谨慎使用strcpy,strcat,gets等允许缓冲区溢出的函数

//3.有界指针
#define SIZE 32
char name[SIZE];
char *p = name;
if(name != NULL) { 
    if(p >= name && p < name+SIZE) { 
        // 有效指针,继续 
    } else { 
        // 无效指针,错误分支
    }
}

//4.结构体
//结构体的内存分配不一定是连续的,使用指针算术符可能出现错误

//错误的使用
Employee employee;
// 初始化employee
char *ptr = employee.name;
ptr += sizeof(employee.name);

//正确的使用
Item part = {12345, 35, 107};
int *pi = &part.partNumber;
printf("Part number: %d\n",*pi);
pi++;
printf("Quantity: %d\n",*pi);
pi++;
printf("Bin number: %d\n",*pi)
//OR
int *pi = &part.partNumber;
printf("Part number: %d\n",*pi);
pi = &part.quantity;
printf("Quantity: %d\n",*pi);
pi = &part.binNumber;
printf("Bin number: %d\n",*pi)
//OR
printf("Part number: %d\n",part.partNumber);
printf("Quantity: %d\n",part.quantity);
printf("Bin number: %d\n",part.binNumber);

//5.函数指针
//只用函数名本身时返回的是函数的地址

3.内存释放

//1.重复释放:将同一块内存释放两次称为重复释放
//简单办法是释放指针后总是将其置为NULL,大部分堆管理器都会忽略后续对空指针的释放

//2.清除内存中敏感数据
char *name = (char*)malloc(...);
...
memset(name,0,sizeof(name));
free(name);

相关文章

  • C指针(8):安全和误用

    安全和误用 1.声明和初始化 2.缓冲区溢出 3.内存释放

  • Golang 指针

    指针 区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。Go语言当中的指针涉及到三个点:指...

  • Go语言基础之指针

    区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。 要搞明白Go语言中的指针需要先知道3个...

  • [C指针]安全使用指针

    学习笔记 《深入理解C指针》http://www.ituring.com.cn/book/1147第7章安全问题和...

  • go语言指针类型的使用

    go语言的指针类型 简单地说go语言的指针类型和C/C++的指针类型用法是一样的,除了出去安全性的考虑,go语言增...

  • Rust

    和 C++ 相比,我为什么要选择 Rust 来开发软件? 保证内存安全,它在安全代码里不容许空指针、悬垂指针和数据...

  • 特殊数据类型

    指针 GO 语言像 C 一样有指针,可以通过指针访问数据,但是 GO 的指针要安全的多: 首先,访问空指针会直接报...

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • iOS开发 -- C语言基础8(指针)

    iOS开发 -- C语言基础8(指针) 指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很...

  • C++ 指针常量、常量指针和常指针常量

    参考:C++ 指针常量、常量指针和常指针常量

网友评论

      本文标题:C指针(8):安全和误用

      本文链接:https://www.haomeiwen.com/subject/ievctktx.html