到目前为止,这就是我所拥有的:
标题文件:
struct MyValue
{
unsigned char byData[8];
};
cpp文件:
MyValue** values = new MyValue*[5];
void FillArray(void) {
memcpy(&values[0]->byData, new unsigned char('98'), sizeof(unsigned char));
memcpy(&values[1]->byData, new unsigned char('5'), sizeof(unsigned char));
memcpy(&values[2]->byData, new unsigned char('78'), sizeof(unsigned char));
memcpy(&values[3]->byData, new unsigned char('15'), sizeof(unsigned char));
memcpy(&values[4]->byData, new unsigned char('9'), sizeof(unsigned char));
}
第一个memcpy导致:Access violation writing location 0xCDCDCDCD
来自有管理的背景,我在处理指针时并不是那么擅长,经过大量的谷歌搜索后,我从这里得到了这个想法:http://www.cplusplus.com/reference/cstring/memcpy/
但我仍然被卡住了。我必须有这个有点奇怪的结构,因为我试图复制第三方.dll的行为,它返回一个指向包含此unsigned char byData[8]
的结构数组的指针,但我似乎完全迷失了
这是我的第一次尝试:
void FillArray(void) {
for (int i = 0; i < 5; i++)
*values[i]->byData = i; //tried to force a cast, but access violation came before it
}
导致相同的错误。我对使用&
运算符的地址和*values
之类的内容有一些了解,但我对这种情况感到困惑。
答案 0 :(得分:0)
主要问题是内存分配。你有二维数组,但只分配了一个维度。
此示例未经过测试,但我希望它能帮助您解决问题。
#include<new>
#include<cstdlib>
#include"myvalue.h"
MyValue** values;
void init() {
values = malloc(sizeof(MyValue*)*5); // returns pointer to array of pointers
*values = new MyValue[5]; // return five pointers to objects
}
void FillArray(void) {
for (int i = 0; i < 5; i++)
// !!! EDIT !!! there should not be derefference or arrow
values[i]->byData = i; //this should work
// *values[i].byData = i; //this should work too
}
int main() {
init();
FillArray();
// do whatever you want
// free memory from the last you created
delete *values; // do not switch this
free(values); // when switched, it cause memory error
return 0;
}