【发布时间】:2015-12-06 20:32:39
【问题描述】:
我的结构如下所示:
typedef struct object {
entry **entries;
} object;
typedef struct entry {
int value;
} entry;
在我的代码中某处我有一个静态条目数组(用一些随机数据初始化);
entry entries[][] = {... (doesn't matter)...};
如何将这些条目复制到对象中? 我需要这样的东西:
object obj;
obj.entries = entries;
编辑:我不想复制“for”循环中的每个元素。
建议后:
好的。我有:
entry entries[initial_height][initial_width];
....initialize entries...
object obj;
int i;
obj.entries = (entry**) malloc(initial_height * sizeof(entry*));
for (i = 0 ; i < initial_height; i++) {
obj.entries[i] = (entry*) malloc(initial_width * sizeof(entry));
}
memcpy(obj.entries, entries, sizeof(entry) * initial_height * initial_width);
printf("%d\n", entries[0][0].value);
printf("%d\n", obj.entries[0][0].value);
我遇到了分段错误(第一次打印有效)。我还做错了什么?
【问题讨论】:
-
如果您知道要复制的元素的大小,请尝试使用 memcpy 进行复制
-
这些有不同的类型!指针不是数组!
-
1) 不要在 C 中转换
malloc和朋友的结果。2) 你有一个指向指针的指针,而不是你的struct中的二维数组。这与二维数组不同! 3) 你调用了未定义的行为。 -
我知道它和二维数组不一样。我想知道如何让它指向那个二维数组(或另一个具有相同值的数组)
-
在编辑版本中,
memcpy是无望的。您刚刚分配了几个小内存块,都在不同的位置。您如何期望使用单个 memcpy 一次将它们全部写入。在 C 语言中,清楚地了解内存分配的位置非常重要。