【发布时间】:2014-03-31 10:41:20
【问题描述】:
以下语句引发超出内存错误的访问。我仍然不确定它为什么会那样做。谁能帮我在这里做错了什么?谢谢
memcpy(mhp_ptr->dpair[0].dpairid, id0, 8);
这里 id0 的类型是 const char *
其中,mhp_ptr 是 mhp_t * 类型,其定义如下:-
typedef struct mhp_s
{
uint8_t editor[16];
uint64_t refcode;
uint64_t error_id;
union
{
uint8_t dpairtbl[16][6];
dpairtbl_t dpair[6];
};
} mhp_t;
而dpairtbl_t定义如下:-
typedef struct dpairtbl_s
{
char dpairid[8];
uint64_t dpairdata;
} dpairtbl_t;
错误:- 访问超出分配的内存 “memcpy”可以从缓冲区“id0”中读取 8 个字节
我的项目的编译器设置将警告视为错误。正常编译工作正常,但它发出一个警告,根据我的编译器中的设置被视为错误。 只是想知道为什么它对 strcpy 工作正常,但在 memcpy 的情况下发出警告。在字符串的情况下,对 memcpy 的使用是否有任何 C++ 限制?
【问题讨论】:
-
嗯,
id0指向的内存是多少? -
您将 8 个字符的大小 + 一个 int64 写入包含 8 个字符的内存中。
-
id0 是 const char* 类型。如果我使用 strcpy 它可以正常工作,我不会收到任何错误,但如果我使用 memcpy 它会引发错误
标签: c++ pointers constants memcpy