本帖最后由 奋斗丶小Z 于 2016-1-12 22:55 编辑
大家看下这段代码是否存在问题???自己先试着看看不要放入编译器中调试运行先
[C] 纯文本查看 复制代码 #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int WorkStr(const char *str1, char **OutStr, int len)
{
int ret = 0;
char *p1 = NULL, *p2 = NULL;
char *tmp = NULL;
char tmp_value;
if (NULL == str1 || 1 >= len)
{
ret = -1;
printf("func WorkStr err: %d \n", ret);
return ret;
}
tmp = (char *)malloc(sizeof(char) * len);
strcpy(tmp, str1);
p1 = tmp;
p2 = p1 + strlen(tmp) - 1;
while (p1 < p2)
{
tmp_value = *p1;
*p1 = *p2;
*p2 = tmp_value;
p1++;
p2--;
}
*OutStr = tmp;
printf("tmp:%p\n", tmp);
return ret;
}
int main()
{
char *str1 = "abcd";
char *str2;
int rv = 0;
int len = strlen(str1);
rv = WorkStr(str1, &str2, len);
if (-1 == rv)
{
return rv;
}
printf("%s\n", str2);
printf("str2:%p\n", str2);
free(str2);
system("pause"); return rv;
}
2.实在没发现就试着赋值到自己的编译器上试试
发现问题了么???
问题提示:在malloc那行出现了一个巨大的bug
其实这个问题很简单!解决问题的关键是在在乎不在乎这几个字节大小的空间
所以在这题做个笔记提示自己还有上面没有发现问题的友友
申请内存的时候习惯多一点
|