gpt4 book ai didi

c - 如何调试此代码中的段错误?

转载 作者:行者123 更新时间:2023-11-30 20:59:26 30 4
gpt4 key购买 nike

Question: Intersecting Merge Sort

       Input--abc//first string
def//second string
Output-- adbecf
Input 2-- abc
defgh
Output adbecfgh**

我的代码中出现段错误,但我不知道为什么。我认为我的代码没有指向任何无效指针,如何删除此代码?

这是我的 C 解决方案代码

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
char *mergeTwo(char *a,char *b)
{ char *c;int k=0,i=0;
while(1)
{
if(a[i]!='\0' && b[i]!='\0')
{
if(a[i]>=b[i])
{
c[k++]=b[i];
c[k++]=a[i];
}
else
{ c[k++]=a[i];
c[k++]=b[i];

}
}
else if(a[i]!='\0' && b[i]=='\0')
{
c[k++]=a[i];
}
else if(a[i]=='\0' && b[i]!='\0')
{
c[k++]=b[i];
}
else if(a[i]=='\0' && b[i]=='\0')
{
c[k]='\0';
break;
}i++;
}
return c;
}

int main() {
char str1[100],str2[100],*str3;
gets(str1);
gets(str2);
str3= mergeTwo(str1,str2);
puts(str3);
return 0;
}

错误:

ERROR

最佳答案

两个问题:

正如 dresxherim 所指出的:*c 没有分配内存。并且只有当进程存在时才是免费的。

当前逻辑假设两个字符串的长度相同。当一个较长时,您也会遇到段错误。

char *mergeTwo(char *a,char *b)
{ char *c;int k=0,i=0, j=0;

c = malloc(strlen(a) + strlen(b) + 1); // include null for termination.

while(1)
{

// Code reworked for if string A and B are different lengths.

if(a[i]!='\0' && b[j]!='\0')
{
if(a[i]>=b[j])
{
c[k++]=b[j++];
c[k++]=a[i++];
}
else
{ c[k++]=a[i++];
c[k++]=b[j++];

}
}
else if(a[i]!='\0')
{
c[k++]=a[i++];
}
else if(b[j]!='\0')
{
c[k++]=b[j++];
}
else { // if(a[i]=='\0' && b[j]=='\0')

c[k]='\0';
break;
}
} // end while

return c;
}



int main() {
char str1[100],str2[100],*str3;
gets(str1);
gets(str2);
str3= mergeTwo(str1,str2);
puts(str3);
free(str3); // free memory allocated.
return 0;
}

另存为test.c,在OS X上编译并测试:

$ cc test.c 
$ ./a.out
warning: this program uses gets(), which is unsafe.
abc
def
adbecf

关于c - 如何调试此代码中的段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47503771/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com