【问题标题】:Append to the end of an array追加到数组的末尾
【发布时间】:2019-05-30 01:23:07
【问题描述】:

我的目标是将 List 附加到数组的末尾。当我尝试执行它给我分段错误。

我试着做一个小调试,给我问题的指令在 for cicle 中:

array[i] = tmp[i];

这是我的代码:

int i;
List *tmp = array;

array = (List *)malloc((dim+1) * sizeof(List));

for (i = 0; i < dim; i++) {
    array[i] = tmp[i];
}

dim++;

array[dim-1] = (List)malloc(sizeof(struct TList));
memcpy(array[dim-1], set, sizeof(struct TList));

return array;

其中“dim”是一个全局变量,我用它来跟踪数组的维度

我知道这可能很简单,但我真的不知道如何解决这个问题。

感谢您的帮助

【问题讨论】:

  • 你能提供一个minimal reproducible example吗?例如,现在我们事先不知道array 是什么。同样将指针从 malloc 转换为 List 似乎很奇怪,以及 array 包含非指针内容并试图将动态分配的内存放入其中。
  • List *addToProcessedNode(List *array,List set)
  • 这是List类型
  • 这是列表类型
  • @xing 你说的很对,现在我还以为 List 是一个结构体,做一个指针会改变一切

标签: c arrays list segmentation-fault append


【解决方案1】:

第一句话:

int i;
List *tmp = array;

array = (List*)malloc((dim+1) * sizeof(List));

for (i = 0;i < dim;i++){

  array[i] = tmp[i];

}

可能就是这样:

array = realloc(array, (dim+1) * sizeof(List));

在array[dim-1] = (List)malloc(sizeof(struct TList));中,为什么强制转换中的类型不是sizeof中的类型?

但真正的问题是,除了通过内存泄漏释放内存之外,您希望执行该分配什么?

必须删除该行。


TList和list的定义和set的类型是什么?


线

memcpy(array[dim-1], set, sizeof(struct TList));

错了,必须是(set必须是List)

array[dim-1] = set;

因为数组是List的向量,而不是List *

的向量

【讨论】:

  • 这是列表类型 struct TList { int target;内部标识;国际比索;结构 TList* 下一个; }; typedef struct TList* List;
  • 顺便说一句,如果realloc 失败,将array 作为第一个参数传递给realloc 将导致内存泄漏,因为返回的空指针将分配给array但最初由array 引用的块将不会是freed。
  • @MedardoCalabresi 数组是 List 的向量,而不是 List * 的向量,array[dim-1] = (List)malloc...` 是错误的,因为它是内存泄漏并且 malloc 返回 List * 所以 Cast 是也错了,最后那个作业没用
  • @MedardoCalabresi 我没有看到 List 是一个指针,所以最后你必须将 memcpy(array[dim-1], set, sizeof(struct TList)); 替换为 array[dim-1] = set;
猜你喜欢
  • 1970-01-01
  • 2018-03-15
  • 2013-03-21
  • 2023-04-03
  • 2013-10-26
  • 2023-03-02
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
相关资源
最近更新 更多