如何填充指向结构数组的指针,其中唯一的结构字段是unsigned char数组?

时间:2017-03-06 13:23:35

标签: arrays pointers

到目前为止,这就是我所拥有的:

标题文件:

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之类的内容有一些了解,但我对这种情况感到困惑。

1 个答案:

答案 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;
}