一级指针易错点整理

简介: 一级指针易错点整理

易错点


越界问题


void test(){
  char buf[3] = "abc";
  printf("buf:%s\n",buf);
}


末尾还有\0,应该设置buf[4]


指针叠加会不断改变指针指向


如下面案例,每次对p++,就修改了指针的指向


void test(){
  char *p = (char *)malloc(50);
  char buf[] = "abcdef";
  int n = strlen(buf);
  int i = 0;
  for (i = 0; i < n; i++)
  {
    *p = buf[i];
    p++; //修改原指针指向
  }
  free(p);
}


返回局部变量地址


如下面函数,如果返回str,当函数调用完后,系统会释放函数中的临时变量,最终就不能获得str里面的值,正确的应该用实际参数来保存当前字符串变量内容。


char *get_str()
{
  char str[] = "abcdedsgads"; //栈区,
  printf("[get_str]str = %s\n", str);
  return str;
}


同一块内存释放多次(不可以释放野指针)


void test(){  
  char *p = NULL;
  p = (char *)malloc(50);
  strcpy(p, "abcdef");
  if (p != NULL)
  {
    //free()函数的功能只是告诉系统 p 指向的内存可以回收了
    // 就是说,p 指向的内存使用权交还给系统
    //但是,p的值还是原来的值(野指针),p还是指向原来的内存
    free(p); 
  }
  if (p != NULL)
  {
    free(p);
  }
}


free()函数的功能只是告诉系统 p 指向的内存可以回收了(p 指向的内存使用权交还给系统),p的值还是原来的值(野指针),p还是指向原来的内存


例如下面程序,释放前后p的指向不变,只是告诉系统,可以回收了,系统去回收。


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void test() {
  int *p=NULL;
  p = (int *)malloc(sizeof(int));
  printf("释放前p指向:%d\n",p);
  free(p);
  printf("释放后p指向:%d", p);
}
int main()
{
  test();
  return 0;
}


相关文章
|
13天前
|
存储 C语言
一级指针和二级指针的区别
一级指针和二级指针的区别
13 1
|
2月前
|
存储 前端开发 程序员
一级指针和二级指针,取地址和不取地址调用函数区别及其应用
一级指针和二级指针,取地址和不取地址调用函数区别及其应用
|
2月前
|
C语言
C语言(指针详解)重点笔记:指针易错点,都是精华
C语言(指针详解)重点笔记:指针易错点,都是精华
37 0
|
12月前
|
存储
指针指向空间的申请和释放易错点
指针指向空间的申请和释放易错点
一级指针传参 二级指针传参 函数指针---指向函数的指针,存放函数地址的指针 数组指针 指针数组 及相关例题
一级指针传参 二级指针传参 函数指针---指向函数的指针,存放函数地址的指针 数组指针 指针数组 及相关例题
64 0
聊一聊指针的易错点
聊一聊指针的易错点
78 0
|
C语言
C语言提高:结构体嵌套一级指针
C语言提高:结构体嵌套一级指针
124 0
C语言提高:结构体嵌套一级指针
|
C语言
C语言提高:一级指针的输入输出
C语言提高:一级指针的输入输出
120 0
|
C语言
【C 语言】结构体 ( 结构体中嵌套一级指针 | 分配内存时先 为结构体分配内存 然后再为指针分配内存 | 释放内存时先释放 指针成员内存 然后再释放结构头内存 )
【C 语言】结构体 ( 结构体中嵌套一级指针 | 分配内存时先 为结构体分配内存 然后再为指针分配内存 | 释放内存时先释放 指针成员内存 然后再释放结构头内存 )
195 0
【C 语言】结构体 ( 结构体中嵌套一级指针 | 分配内存时先 为结构体分配内存 然后再为指针分配内存 | 释放内存时先释放 指针成员内存 然后再释放结构头内存 )
|
存储 C语言
【C 语言】二级指针案例 ( 字符串切割 | 返回 自定义二级指针 作为结果 | 每个 一级指针 指向不同大小内存 | 精准分配每个 一级指针 指向的内存大小 )
【C 语言】二级指针案例 ( 字符串切割 | 返回 自定义二级指针 作为结果 | 每个 一级指针 指向不同大小内存 | 精准分配每个 一级指针 指向的内存大小 )
99 0
【C 语言】二级指针案例 ( 字符串切割 | 返回 自定义二级指针 作为结果 | 每个 一级指针 指向不同大小内存 | 精准分配每个 一级指针 指向的内存大小 )