复制到已分配的内存时出现段错误

时间:2018-12-29 11:57:11

标签: c malloc

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

const int debug = 1;                                                                                                                                                                                           


void copy_array(char* input, char** output, int len) {
  *output = (char *)malloc(len * sizeof(*output));                                                                                                                                                                               
  if (debug) printf("copy_array: len: %x\n", len);                                                                                                                                                             
  for (int i=0; i<len; i++) {                                                                                                                                                                                  
    printf("Pre assignment: %x\n", input[i]);                                                                                                                                                                  
    *output[i] = input[i];                                                                                                                                                                                     
    printf("Post assignment\n");                                                                                                                                                                               
  }

}

int main(void) {

  char input[] = { 49, 27, 0x6d, 20, 0 };                                                                                                                                                                         
  char c;                                                                                                                                                                                                      
  char* output;                                                                                                                                                                                                
  int len = strlen(input);                                                                                                                                                                                     
  copy_array(input, &output, len);                                                                                                                                                                             
  return 0;                                                                                                                                                                                                    
}

是示例代码,由于“ * output [i] = ...”这一行我不理解,因此我遇到了段错误。

有人知道我在做什么错吗?

编辑:解决了现有评论,回复:

  • 缺少stdlib.h包含
  • 非空终止数组
  • 未将sizeof用于malloc

编辑2:问题是由Antti Haapala解决的:[]绑定比*更紧密,因此需要“(* output)[i]”。

1 个答案:

答案 0 :(得分:2)

input不以0结尾。对其调用strlen是未定义的行为。

您还没有分配足够的内存。您需要len * sizeof output[0]