#include<stdio.h> #include<stdlib.h> #include<string.h> int main(int argc,char **argv) { char *p; int i; p=malloc(30); strcpy(p,"not 30 bytes"); printf("p=<%s>\n",p); if(argc==2) { if(strcpy(argv[1],"b")==0) p[50]='a'; else if(strcmp(argv[1],"-f")==0) { free(p); p[0]='b'; } } return 0; }
时间: 2024-01-24 07:02:46 浏览: 38
虽然在第二个if语句的else分支中加入重新分配内存的操作也可以解决问题,但是更好的解决方法是在第一个if语句的else分支中加入一个提示错误的语句,告诉用户输入的参数有误,这样可以避免对已释放的内存进行操作,同时也可以更好地保护程序的健壮性。
修改后的代码如下所示:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv) {
char* p;
int i;
p = malloc(30);
strcpy(p, "not 30 bytes");
printf("p=<%s>\n", p);
if (argc == 2) {
if (strcmp(argv[1], "b") == 0)
p[50] = 'a';
else if (strcmp(argv[1], "-f") == 0) {
free(p);
p = NULL;
}
else {
printf("Invalid argument\n");
return 1;
}
}
return 0;
}
```
在第一个if语句的else分支中加入了一个printf语句,提示用户输入的参数有误,同时当输入的参数不是"-f"时,程序会直接返回1,避免了对已释放的内存进行操作。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)