我对此代码有疑问:
char * findAlphabet(char *string)
{
char *tmp_alph = (char *)malloc(sizeof(char) * strlen(string));
char *alphabet = (char *)malloc(sizeof(char) * strlen(string));
strcpy(tmp_alph, string);
qsort(tmp_alph, strlen(string) - 1, sizeof(char), strcmp);
int i = 1, k = 1;
alphabet[0] = tmp_alph[0];
for(i = 1; i < strlen(string); ++i)
{
if(tmp_alph[i] != tmp_alph[i - 1])
{
alphabet[k++] = tmp_alph[i];
}
}
alphabet[k - 1] = tmp_alph[strlen(string) - 1]; //Terminator
alphabet[k] = '\0';
free(tmp_alph);
return alphabet;
}
执行:
char *string = "ABBDDECACDABBDDFCACDAACACABBDDECACDBBCC$\0";
我有以下错误:
malloc(): memory corruption (fast): 0x0000000001a4ed50 ***
使用调试器似乎问题似乎正在执行:
free(tmp_alph);
这段代码出了什么问题?
如果我评论free(tmp_alph),结果似乎是正确的。
答案 0 :(得分:0)
strlen(string)
返回string
的长度,忽略终结符\0
。为tmp_alph
分配空间时,您应该考虑此字符串还必须具有终止符,因此您必须在数组中明确声明其他位置。
char *tmp_alph = (char *) malloc(sizeof(char) * (strlen(string)+1));
我还会在tmp_alph
中手动设置终结者字符,以防strcpy
自动执行此操作。
tmp_alph[strlen(string)+1] = '\0';