[MM32软件] free()函数导致的问题

[复制链接]
1256|1
 楼主| OKAKAKO 发表于 2024-8-31 15:32 | 显示全部楼层 |阅读模式

下面的程序会在用户输入’freeze’的时候出问题,而’zebra’则不会,为什么?

  1. #include<stdio.h>

  2. int main(int argc, char *argv[])
  3. {
  4.     char *ptr = (char*)malloc(10);

  5.     if(NULL == ptr)
  6.     {
  7.         printf("\n Malloc failed \n");
  8.         return -1;
  9.     }
  10.     else if(argc == 1)
  11.     {
  12.         printf("\n Usage  \n");
  13.     }
  14.     else
  15.     {
  16.         memset(ptr, 0, 10);

  17.         strncpy(ptr, argv[1], 9);

  18.         while(*ptr != 'z')
  19.         {
  20.             if(*ptr == '')
  21.                 break;
  22.             else
  23.                 ptr++;
  24.         }

  25.         if(*ptr == 'z')
  26.         {
  27.             printf("\n String contains 'z'\n");
  28.             // Do some more processing
  29.         }

  30.        free(ptr);
  31.     }

  32.     return 0;
  33. }

首先这里的问题在于,代码会(通过增加“ptr”)修改while循环里“ptr”存储的地址。
当输入“zebra”时,while循环会在执行前被终止,因此传给free()的变量就是传给malloc()的地址。

但在“freeze”时,“ptr”存储的地址会在while循环里被修改,因此导致传给free()的地址出错,也就导致了seg-fault或者崩溃。

LOVEEVER 发表于 2024-8-31 16:57 | 显示全部楼层
确实函数需要重点关注以及过程问题解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则

260

主题

2096

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部