C--野指针1

青旅半醒 2023-06-25 14:25 96阅读 0赞

#include
#include

int main()
{
int* p1 = (int*)malloc(40);
int* p2 = (int*)1234567;
int i = 0;

  1. for(i=0; i<40; i++)
  2. {
  3. *(p1 + i) = 40 - i;
  4. }
  5. free(p1);
  6. for(i=0; i<40; i++)
  7. {
  8. p1[i] = p2[i];
  9. }
  10. return 0;

}

以上代码存在很多问题如下表示:
#include
#include

int main()
{
int* p1 = (int*)malloc(40); //开辟内存空间的时候要指定内存的长度
int* p2 = (int*)1234567; //指向了一段固定的可能违法的地址空间
int i = 0;

  1. for(i=0; i<40; i++)
  2. {
  3. *(p1 + i) = 40 - i; //操作的是对P1指向的往后的40个整形空间初始化,而前面动态分配的空间只有40个字节,因此出现问题。
  4. }
  5. free(p1); //虽然这里释放了指针,但是p1没有指向NULL,而是指向了一个地址,所以p1在这里是野指针。
  6. for(i=0; i<40; i++)
  7. {
  8. p1[i] = p2[i];//将野指针地址的数据赋值给另一个错误的指针,明显错误。
  9. }
  10. return 0;

}

修改如下:

#include
#include

int array[50] = {1,2,3,4,5,6,7};

int main()
{
int* p1 = (int*)malloc(40sizeof(int));
int
p2 = array;
int i = 0;

  1. for(i=0; i<40; i++)
  2. {
  3. *(p1 + i) = 40 - i;
  4. }
  5. printf("p1 = %p.\n",p1);
  6. printf("p2 = %p.\n",p2);
  7. for(i=0; i<40; i++)
  8. {
  9. p1[i] = p2[i];
  10. }
  11. printf("p1 = %p.\n",p1);
  12. printf("p2 = %p.\n",p2);
  13. free(p1);
  14. p1 = NULL;
  15. return 0;

}

/练习代码
#include
#include
#include
char wd_name[] = “hello word!”;
struct Student
{
char name ;
int number;
};
void del(char
p)
{
printf(“%s\n”, p);

  1. free(p);

}

int main()
{
struct Student s ;
struct Student * s_tp = (struct Student*)malloc(sizeof(struct Student));
s_tp->name = “hellosssssssssssssssssssssssssssssssssssssssssssss”;
s_tp->number = 99;

  1. printf("%s %d.\n",s_tp->name,s_tp->number);
  2. free(s_tp);
  3. return 0;

}
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1aHVvbGlhbm1lbmc_size_16_color_FFFFFF_t_70

free;free()是C语言中申请内存空间与释放内存空间的函数
只释指向堆空间的指针,指向其他的区域的指针他不释放

发表评论

表情:
评论列表 (有 0 条评论,96人围观)

还没有评论,来说两句吧...

相关阅读

    相关 指针

    昨天在写完一个函数后,因里面用了很多指针操作, 写完后就回过头来检查,结果发现了一个”野指针”, 另我非常奇怪的是,这个”野指针”被我再次使用,程序运行居然没有问题.

    相关 C++ 指针和悬空指针

    都是是指向无效内存区域(这里的无效指的是"不安全不可控")的指针,访问行为将会导致未定义行为。 野指针:指的是没有被初始化过的指针。 int main(void) 

    相关 指针

    野指针 野指针不是空指针,是一个指向垃圾内存的指针。 形成原因: 1.指针变量没有被初始化。 任何指针变量被刚创建时不会被自动初始化为NULL指针,它的缺省值是

    相关 C语言指针分析

    1. 野指针的概念                  所谓的野指针,就是说指针指向的那块内存,你没有合法操作的权限,也就是指针指向非法的内存空间,这样的指针就叫做野指针。

    相关 C语言指针

    野指针产生原因:利用 free函数释放了指针的内存空间 但指针本身没有重置为NULL 造成 释放的时候 仍可以通过 p!=NULL 进行判断 避免方法 在定义指针时