memcpy 问题 -> 尝试复制结构数组
memcpy issue -> trying to copy an array of struct
我完全不知道为什么memcpy或memmove对我不起作用。
我正在尝试将结构数组(作业列表)复制到另一个相同结构 (Q) 的数组以用于数据操作,同时保持我的原始数组不变。
我花了很多时间在SO和谷歌对此进行故障排除,但我无法找到为什么它不起作用。
Q = new AdjacencyList[numjobs + 1]; //create a queue
// Q = joblist;
memmove(&Q, &joblist, sizeof(AdjacencyList) );
Q[0].jobnum = 30;
我试图只做 Q = joblist,但是当我更改一个值时,它在两个值中都发生了变化。
struct AdjacencyList {
NodeType state; // what is present state of job?
NodePath path; // is job part of critical path?
int jobnum;
int edges;
int tocount;
int fromcount;
int to[50];
int from[50];
};
AdjacencyList *joblist;
AdjacencyList *Q;
这是我创建的结构。
*** Error in `p5.out': corrupted double-linked list: 0x0989e8c0 ***
======= Backtrace: =========
/lib/libc.so.6[0x47975143]
/lib/libc.so.6[0x4797b984]
/lib/libc.so.6[0x4797cd28]
/lib/libstdc++.so.6(_ZdlPv+0x20)[0x47d8d9e0]
/lib/libstdc++.so.6(_ZdaPv+0x1c)[0x47d8da3c]
任何帮助将不胜感激。谢谢。
子
他们以你称呼memmove(dst, src, sizes)
的方式。不正确。它应该是
memmove(Q, joblist, sizeof(AdjacencyList) * (numjobs + 1));
更新:
就像它的名字一样,memmove
在内存上运行。它只是将sizes
字节的数据从src
复制到dst
。
如果要将 n 个对象的数组复制到 Q
,则必须告诉函数要复制的数据的总大小,即size of each objects * number of objects
。我不知道您需要复制多少对象,numjobs + 1
只是一个示例。如果要复制numjobs
它应该是 sizeof(AdjacencyList) * numjobs
.
memmove(&Q, &joblist, sizeof(AdjacencyList) );
是错误的,导致未定义的行为。它将 sizeof(AdjacencyList)
字节从 joblist
的地址复制到 Q
的地址。
您需要使用的是:
memmove(Q, joblist, sizeof(AdjacencyList) );
将一个对象从 joblist
复制到 Q
。如果要复制numjobs + 1
对象,则需要使用:
memmove(Q, joblist, sizeof(AdjacencyList)*(numjobs + 1));
相关文章:
- 在一个微不足道的可复制结构中,移动语义应该实现吗?
- 复制结构 tm
- 复制结构时,system.AccessVioLationException
- C++:是否隐式复制结构
- 复制结构的一部分
- 在不使用 std::copy 函数的情况下编写这个复杂的复制结构体
- memcpy 问题 -> 尝试复制结构数组
- 使用declard和参数转发构造函数隐式复制结构
- 如何复制结构数组
- 如何复制结构数组
- C++ 不带指针的复制结构
- 添加到矢量而不复制结构数据
- 从 std::vector 中删除复制结构成员
- 仅在发布版本中出错,从 std::vector 复制结构
- 引用或复制结构的结构(已分配的memset)是一件有效的事情
- 深度复制结构C++
- 如何从指向void的指针复制结构体
- 在新版本的 gcc 上返回隐式不可复制结构的 std::map 时出现编译错误
- C/C++是如何复制结构的
- c++内存复制结构体到字节数组中