memcpy 问题 -> 试图复制一个结构数组
memcpy issue -> trying to copy an array of struct
我完全不知道为什么 memcpy 或 memmove 对我不起作用。
我正在尝试将一个结构数组 (joblist) 复制到另一个具有相同结构 (Q) 的数组以用于数据操作,同时保持原始数组不变。
我花了很多时间在 SO 上,google 对此进行了故障排除,但我无法找出它不起作用的原因。
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));
我完全不知道为什么 memcpy 或 memmove 对我不起作用。
我正在尝试将一个结构数组 (joblist) 复制到另一个具有相同结构 (Q) 的数组以用于数据操作,同时保持原始数组不变。
我花了很多时间在 SO 上,google 对此进行了故障排除,但我无法找出它不起作用的原因。
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));