Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 显示黑客等级中的分段错误_C - Fatal编程技术网

C 显示黑客等级中的分段错误

C 显示黑客等级中的分段错误,c,C,下面是编译器(Hackerrank c编译器)显示的错误。这里a是指针,通过malloc分配内存块的起始地址,并在运行时给输入一个字符串。有人能帮我吗 GDB trace: Reading symbols from solution...done. [New LWP 4659] Core was generated by `solution'. Program terminated with signal SIGSEGV, Segmentation fault. #0 main () at s

下面是编译器(Hackerrank c编译器)显示的错误。这里a是指针,通过malloc分配内存块的起始地址,并在运行时给输入一个字符串。有人能帮我吗

GDB trace:
Reading symbols from solution...done.
[New LWP 4659]
Core was generated by `solution'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  main () at solution.c:22
22      if ((a[i] != a[j]) && (i >= 0 && j < n)) {
#0  main () at solution.c:22
GDB跟踪:
从解决方案中读取符号…完成。
[新LWP 4659]
核心由“解决方案”生成。
程序以信号SIGSEGV终止,分段故障。
#0 main()位于solution.c:22
22如果((a[i]!=a[j])&&(i>=0&&j
我的代码是

#include <stdio.h>
#include <stdlib.h>
int main() {
    int n, k, i, j, mid;
    char *a;
    int *l;
    a = (char *)malloc((n + 1) * sizeof(char));
    scanf("%d", &n);
    scanf("%d", &k);
    scanf("%s", a);
    mid = (0 + (n - 1)) / 2;
    if (n % 2 == 0) {
        i = mid;
        j = mid + 1;
        l = (int *)malloc((n / 2) * sizeof(int));
    } else {
        i = mid;
        j = mid;
        l = (int *)malloc((n / 2 + 1) * sizeof(int));
    }

    while (k != 0) {
        if ((a[i] != a[j]) && (i >= 0 && j < n)) {
            if (a[i] > a[j]) {
                a[j] = a[i];
                k--;
                i--;
                j++;
            } else {
                a[i] = a[j];
                k--;
                i--;
                j++;
            }
        }
    }
    printf("%s", a);
}
#包括
#包括
int main(){
int n,k,i,j,mid;
char*a;
int*l;
a=(char*)malloc((n+1)*sizeof(char));
scanf(“%d”和“&n”);
scanf(“%d”和“&k”);
scanf(“%s”,a);
mid=(0+(n-1))/2;
如果(n%2==0){
i=中等;
j=mid+1;
l=(int*)malloc((n/2)*sizeof(int));
}否则{
i=中等;
j=中等;
l=(int*)malloc((n/2+1)*sizeof(int));
}
while(k!=0){
如果((a[i]!=a[j])&&(i>=0&&ja[j]){
a[j]=a[i];
k--;
我--;
j++;
}否则{
a[i]=a[j];
k--;
我--;
j++;
}
}
}
printf(“%s”,a);
}
中,如果((a[i]!=a[j])&(i>=0&&j
条件是相反的。首先索引
a[i]
a[j]
在检查
i
j
是否对
a
索引有效之前。这意味着如果
i
和/或
j
无效,您已经使用了它们。如果((i>=0&&j

编辑:其他明显的问题(现在发布了更多代码):

  • n
    在初始化之前用作
    malloc
    的参数
  • 您不限制
    scanf(“%s”,a);
  • 如果
    i
    和/或
    j
    k!=0
    时超出范围,则循环永远不会终止
  • 如果
    a[i]==a[j]
    k!=0
    ,则循环永远不会终止
还有通常的挑剔:

  • 不要强制转换
    malloc的返回值
  • sizeof(char)
    根据定义总是1,乘以它是没有意义的
中,如果((a[i]!=a[j])&(i>=0&&j
条件是相反的。首先索引
a[i]
a[j]
在检查
i
j
是否对
a
索引有效之前。这意味着如果
i
和/或
j
无效,您已经使用了它们。如果((i>=0&&j

编辑:其他明显的问题(现在发布了更多代码):

  • n
    在初始化之前用作
    malloc
    的参数
  • 您不限制
    scanf(“%s”,a);
  • 如果
    i
    和/或
    j
    k!=0
    时超出范围,则循环永远不会终止
  • 如果
    a[i]==a[j]
    k!=0
    ,则循环永远不会终止
还有通常的挑剔:

  • 不要强制转换
    malloc的返回值
  • sizeof(char)
    根据定义总是1,乘以它是没有意义的

如果,切换
中条件的顺序很可能会很好。您好,请共享您的代码,或者使用一个较小的版本,让我们可以轻松重现问题。我喜欢使用有意义的变量名的程序。此外,scanf返回一个有用的值。切换
中条件的顺序很可能会很好e
如果
。您好,请共享您的代码,或一个较小的版本,让我们可以轻松重现问题。我喜欢使用有意义的变量名的程序。此外,scanf还返回一个有用的值