c - 为什么我会收到段错误 11?

标签 c

我的 printArr 函数出现段错误 11,但我不知道原因。我的代码编译。如果我不包含 printArr 函数,则没有段错误。任何帮助将不胜感激。

void printArr(int* arr, int arrlen){
  printf("{");
  for(int i = 0; i < arrlen; i++){
    printf("%d,", arr[i]);
  }
  printf("}\n");
}

int countDeLen (int* in, unsigned int inlen){
  int counter = 0;
  if (inlen % 2 == 1){
    return -1;
  }
  if (inlen == 0){
    return 0;
  }
  int i = 0;
  while (i < inlen){
    counter += in[i];
    i += 2;
  }
  return counter;
}

void rle_decode(int* in, unsigned int inlen, int** out, unsigned int* outlen){
  outlen[0] = countDeLen(in,inlen);
  if(outlen[0] == -1){
    fprintf(stderr, "the code must have an even length!!!\n");
    exit(1);
  }
  int* outCode = (int*)malloc(outlen[0] * sizeof(int));
  out = (int**)malloc(outlen[0] * sizeof(int));
  if(outlen[0] == 0){
    return;
  }
  int codeIndex = 0;
  int i = 0;
  while(i < inlen){
    for(int a = 0; a < in[i]; a++){
      outCode[codeIndex] = in[i+1];
      codeIndex++;
    }
    i+=2;
  }
  out[0] = outCode;
  return;
}

int main(int argc, char *argv[])
{
  printf("testing rle_decode()\n");
  int dtest1[] = {2,1,3,4,2,3}; unsigned int dlen1 = 6; int *out1; unsigned int outlen;
  rle_decode(dtest1, dlen1, &out1, &outlen);
  printArr(*out1,outlen);
}

我的 printArr 函数出现段错误 11,但我不知道原因。我的代码编译。如果我不包含 printArr 函数,则没有段错误。任何帮助将不胜感激。

最佳答案

您没有正确调用 printArr()。应该是:

printArr(out1,outlen);

你的代码相当于调用

printArr(out1[0], outlen);

但是 printArr() 要求第一个参数是指向 int 数组的指针,而不是单个 int

您应该已经收到有关类型不匹配的警告。

关于c - 为什么我会收到段错误 11?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55803692/

相关文章:

c - 如何接收来自所有子网的 UDP 多播?

c - 是否可以使用一次 calloc() 在 c 中动态分配二维数组?

C fread 省略 0x0D

c - 我怎样才能将二进制转换为c中的字符串

c++ - 警告 : "variable may be used uninitialized in this function" in a multi-mode structured function

c++ - 重新启动后位域会出现硬故障

c - 使用 libssh 打开到本地主机的 channel

C中malloc()的混淆,动态内存分配

c - 无法理解 C 程序的输出

c - 使数组读取文件并存储所有数据