指针、内存操作中的一些其它注意点

xiaoxiao2021-02-28  96

指针、内存操作中的一些其它注意点     (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*,可以赋给任意类型的指针。
转载请注明原文地址: https://www.6miu.com/read-48786.html

最新回复(0)