【发布时间】:2014-05-28 07:22:38
【问题描述】:
我在这里遇到了一个小问题,所以我将一个 char 指针(而不是一个数组)存储在一个 void 指针中,如下所示:
char result[255];
CEVariable result_var(CEType::string, result);
现在 result_var 然后被传递给我的引擎,存储为指针,然后访问变量结构:(m_pData 是一个 void*,指向 char 数组)
strcpy((char*)pVar->m_pData, "42");
但是没有数据写入它,我确定它指向结果数组,因为我检查了地址。也许我对 void 指针的理解有误,但以下似乎可行:(只是测试)
char dest[255];
void*ptr = dest;
strcpy((char*)ptr, "asdsa");
std::cout << dest;
结果数组变成了不可读的格式,很可能是随机内存。也许从来没有写过。我的问题是问题可能是什么?
编辑:CEVariable::
class CEVariable
{
public:
CEVariable() {}
CEVariable(CEType t, void* mem)
{
m_Type = t;
m_pData = mem;
}
// Variable Type
CEType m_Type;
// Variable Data Ptr
void* m_pData;
};
结果不会超出范围,因为所有内容都在一个函数中执行。
感谢您的宝贵时间。
【问题讨论】:
-
CEVariable看起来如何?构造函数是做什么的?你的char result[255]看起来像一个局部变量,所以它会在块的末尾超出范围。 -
strcpy((char*)pVar->m_pData, "42");与初始定义有何关系? -
另外,你如何将
result_var传递到你存储它的地方?你关注rule of three?您在需要时进行深度复制? -
对所有这些问题(我的和其他问题)的最佳答案是创建一个Minimal, Complete, and Verifiable example 并向我们展示。
-
查看已编辑的帖子,我已经解决了它,并且所有内容都在 main 函数中完成,所以任何内容都不应超出范围。
标签: c++ pointers char void strcpy