我正在编写用于删除相似字符的算法代码。 例如如果输入字符串是“abb”,则输出应该是“a”,而对于“abcddbf”输出的字符串应该是“acf”。分段故障点
我已经写了一些代码,如下所述,但一些如何得到Segmentation Faut并且我无法找到错误点。
代码:
#include<stdio.h>
#include<string.h>
char *remove_adjecent_string(char *in,int count)
{
int i=0;
int j=0;
int flag = 0;
int total = strlen(in);
static char *output = NULL;
if(count == 0)
{
output=(char *)malloc(sizeof(char)*total);
if(output == NULL)
{
return NULL;
}
for(i=0,j=0;i<=total;i++)
{
if(in[i] != '*')
{
output[j]=in[i];
j++;
}
}
return (char *)output;
}
for(i=0;i<=count;++i)
{
printf("In loop i :%d count :%d \t",i,count);
printf("Before comparition in[i] = %c , in[count] = %c \t",in[i],in[count]);
if(in[i] == in[count])
{
printf("Same found in[%d] = in[%d] = %c",i,count,in[i]);
in[i]='*';
flag = 1;
}
printf(" Next loop i = %d\n",++i);
}
printf("Before Recursion \n");
output =remove_adjecent_string(in,(count-1));
return (char *)output;
}
int main()
{
char *input;
char *output;
int i=0;
input = (char *)malloc(sizeof(char)*10);
if(input == NULL)
{
return;
}
output=(char *)malloc(sizeof(char)*10);
if(output == NULL)
{
return;
}
input = "abbb";
int count = -1;
count=strlen(input);
output=remove_adjecent_string(input,(count-1));
printf("Input String = %s\n",input);
printf("Output String = %s\n",output);
}
帮助我找出发生故障的情况下。
如果无法使用调试器,把printf语句在每个非重要代码块之后。无论在段错误之前打印什么都可以。您可以根据需要继续添加printf语句,直到您可以识别导致段错误的行。 – siride
使用gdb,看看哪一行给出了分段错误,你可能会得到为什么发生这种情况。 – Rohan
始终分配用过的长度+1(用于\ 0) – Gar