gpt4 book ai didi

c - 在黑客排名中显示段错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:08 26 4
gpt4 key购买 nike

编译器(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

我的代码是

#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);
}

最佳答案

if ((a[i] != a[j]) && (i >= 0 && j < n))条件相反。你先索引a[i]a[j]在你检查 i 之前和 j对索引有效 a .这意味着如果 i和/或 j无效,您已经使用过它们。尝试将顺序反转为 if ((i >= 0 && j < n) && (a[i] != a[j])) .

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

  • n用作 malloc 的参数在初始化之前
  • 你不限制scanf("%s", a);的长度
  • 如果i和/或 jk != 0 时越界, 循环永远不会终止
  • 如果a[i] == a[j]同时 k != 0 , 循环永远不会终止

还有常见的挑剔:

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

关于c - 在黑客排名中显示段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54037736/

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