C - 此代码中的分段错误


#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
void sort(int a[], int n)
{
  int i, j;
  for (i = 0; i < n - 1; i++)
    for (j = i; j < n - 1; j++)
      if (a[j] > a[j + 1])
        a[j] = a[j + 1] - (a[j + 1] = a[j]);
}
int call(int i, int hit, int t, int h[], int n, int count)
{
  static int max = 0;
  if (t <= 0)
  {
    if (count > max)
      max = count;
    return max;
  }
  if (h[i] > 0)
  {
    h[i] -= hit;
    if (h[i] <= 0)
      count++;
    max = call((i + 1) % n, hit, t - 1, h, n, count);//this is line where illegal access to memory is being made
    count--;
    h[i] += hit;
  }
  max = call((i + 1) % n, hit, t, h, n, count);
  return max;
}
int getMaxMonsters(int n, int hit, int t, int h[]) {
  sort(h, n);
  int m = call(0, hit, t, h, n, 0);
  return m;
}
int main() {
  int n;
  int hit;
  int t;
  scanf("%d %d %d", &n, &hit, &t);
  int h[100000];
  for (int h_i = 0; h_i < n; h_i++) {
    scanf("%d", &h[h_i]);
  }
  int result = getMaxMonsters(n, hit, t, h);
  printf("%dn", result);
  return 0;
}

此代码计算可以杀死的最大怪物数量。

  • n不是怪物
  • hit是命中值
  • h[]包含每个怪物的生命值
  • t是可用的总时间

因此,必须在t秒内杀死最大数量的怪物,并且每秒只能杀死一个怪物。我因非法访问内存而遇到分段错误。无法理解我是如何跨越数组限制的。

询问调试器或使用 Valgrind。它会自动检测内存管理错误。它还详细介绍了您的程序。

使用瓦尔格林德太简单了。

相关内容

  • 没有找到相关文章