指针、内存操作中的一些其它注意点
来源:互联网 发布:movo润滑液 知乎 编辑:程序博客网 时间:2024/04/28 21:36
指针、内存操作中的一些其它注意点
(1) 如下例子:
int *a = 0; 表达式*a 等于多少?a是一个NULL指针,对它解引用是错误的。
但有些环境不会在运行时捕捉到这个错误,而是去访问内存位置0的内容,这是
一个隐患。所以,在解引用之前必须先对指针进行有效性检查。
内存操作函数:
void *memcpy( void *dst, void const *src, size_t length );
void *memmove( void *dst, void const *src, size_t length );
void *memcmp( void const *a, void const *b, size_t length );
void *memchr( void const *a, int ch, size_t length );
void *memset( void *a, int ch, size_t length );
以上函数直接对内存操作,以字节数为单位。其中,memcpy能处理任意字节的序列,比如将一段内存中的序列读入一个结构体中;而strcpy()只处理字符序列,且遇NUL字节即结束。
memmove与memcpy的唯一区别是:memmove允许源和目标操作数重叠,memcpy不允许。
memchr从a的起始位置开始查找字符ch第一次出现的位置。
动态分配内存(stdlib.h中):
void *malloc( size_t size ); 分配失败返回NULL,所以要作判断。
void free( void *pointer ); pointer是malloc,calloc,realloc返回值,也可为NULL。动态分配的内存必须整块一起释放。
void *calloc( sizes_t num_elements, size_t element_size ); 与malloc区别在于:calloc将分配的内存初始化为0。
void realloc( void *ptr, size_t new_size ); 修改一个原先已经分配好的内存块的大小(长则不足,短则切割,若原先内存块无法改变大小,则分配另一块内存并返回指向它的指针,所以旧的指针就不能再用了)。若ptr为NULL,则和malloc无异了。返回类型为void*,可以赋给任意类型的指针。
(1) 如下例子:
int *a = 0; 表达式*a 等于多少?a是一个NULL指针,对它解引用是错误的。
但有些环境不会在运行时捕捉到这个错误,而是去访问内存位置0的内容,这是
一个隐患。所以,在解引用之前必须先对指针进行有效性检查。
内存操作函数:
void *memcpy( void *dst, void const *src, size_t length );
void *memmove( void *dst, void const *src, size_t length );
void *memcmp( void const *a, void const *b, size_t length );
void *memchr( void const *a, int ch, size_t length );
void *memset( void *a, int ch, size_t length );
以上函数直接对内存操作,以字节数为单位。其中,memcpy能处理任意字节的序列,比如将一段内存中的序列读入一个结构体中;而strcpy()只处理字符序列,且遇NUL字节即结束。
memmove与memcpy的唯一区别是:memmove允许源和目标操作数重叠,memcpy不允许。
memchr从a的起始位置开始查找字符ch第一次出现的位置。
动态分配内存(stdlib.h中):
void *malloc( size_t size ); 分配失败返回NULL,所以要作判断。
void free( void *pointer ); pointer是malloc,calloc,realloc返回值,也可为NULL。动态分配的内存必须整块一起释放。
void *calloc( sizes_t num_elements, size_t element_size ); 与malloc区别在于:calloc将分配的内存初始化为0。
void realloc( void *ptr, size_t new_size ); 修改一个原先已经分配好的内存块的大小(长则不足,短则切割,若原先内存块无法改变大小,则分配另一块内存并返回指向它的指针,所以旧的指针就不能再用了)。若ptr为NULL,则和malloc无异了。返回类型为void*,可以赋给任意类型的指针。
阅读全文
0 0
- 指针、内存操作中的一些其它注意点
- 指针的一些注意点
- Makefile 中的一些注意点
- Perl中的一些注意点
- OpenGL中的一些注意点
- 开发中的一些注意点
- C指针的一些注意点
- iOS的一些内存注意点
- 单片机中的指针使用注意点
- c++中的引用于指针注意点
- Session的一些操作和注意点
- phoenix的一些操作以及注意点
- C++中的一些注意点(part2)
- C++中的一些注意点(part3)
- C++中的一些注意点(part5)
- Zepto 使用中的一些注意点
- c++ 使用中的一些注意点
- Zepto 使用中的一些注意点
- RE:JAVA学习-循环应用和数组
- Java移位操作、位运算详解
- __bridge、out parameter使用不当引起的BAD_ACCESS错误
- 集合(一)Collection
- 百练2819:W的密码题解
- 指针、内存操作中的一些其它注意点
- oracle undo segments, do blocks
- 用哈希算法的思想解决排序和字符串去重问题,时间复杂度为O(N)
- Matrx的数学原理
- Toastr消息提示框的使用
- PYTHON机器学习实战——集成学习 AdaBoost元算法
- TensorFlow运行MNIST样例碰到下载数据的问题
- shell编程之环境变量配置文件
- 【程序】Marvell 88W8686 WiFi模块与SD内存卡同时插在SDIO总线上的初始化代码