C语言 复制到错误内存时的隔离错误


#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: %xn", len);                                                                                                                                                             
  for (int i=0; i<len; i++) {                                                                                                                                                                                  
    printf("Pre assignment: %xn", input[i]);                                                                                                                                                                  
    *output[i] = input[i];                                                                                                                                                                                     
    printf("Post assignmentn");                                                                                                                                                                               
  }
}
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;                                                                                                                                                                                                    
}

是示例代码,由于我不明白的原因,我在"*输出[i] =..."线。

有谁明白我做错了什么?

编辑:解决了现有评论:

  • 缺少 stdlib.h 包括
  • 非空终止数组
  • 不使用 sizeof for malloc

编辑 2:问题由 Antti Haapala 解决:[] 比 * 绑定得更紧密,因此需要"(*输出)[i]"。

input 不是 0 终止的。对其调用strlen是未定义的行为。

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

相关内容

  • 没有找到相关文章

最新更新