gpt4 book ai didi

c++ - 为结构数组分配内存块

转载 作者:搜寻专家 更新时间:2023-10-30 23:49:53 25 4
gpt4 key购买 nike

我需要一个分配在一 block 固定内存中的结构数组。 “char *extension”和“char *type”的长度在编译时是未知的。

struct MIMETYPE
{
char *extension;
char *type;
};

如果我使用“new”运算符来单独初始化每个元素,内存可能会分散。这就是我尝试为其分配单个连续内存块的方式:

//numTypes = total elements of array
//maxExtension and maxType are the needed lengths for the (char*) in the struct
//std::string ext, type;
unsigned int size = (maxExtension+1 + maxType+1) * numTypes;
mimeTypes = (MIMETYPE*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);

但是,当我尝试像这样加载数据时,当我稍后尝试访问它时,数据全部乱序且分散。

for(unsigned int i = 0; i < numTypes; i++)
{
//get data from file
getline(fin, line);
stringstream parser.str(line);
parser >> ext >> type;

//point the pointers at a spot in the memory that I allocated
mimeTypes[i].extension = (char*)(&mimeTypes[i]);
mimeTypes[i].type = (char*)((&mimeTypes[i]) + maxExtension);

//copy the data into the elements
strcpy(mimeTypes[i].extension, ext.c_str());
strcpy(mimeTypes[i].type, type.c_str());
}

谁能帮帮我?

编辑:

unsigned int size = (maxExtension+1 + maxType+1);
mimeTypes = (MIMETYPE*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size * numTypes);

for(unsigned int i = 0; i < numTypes; i++)
strcpy((char*)(mimeTypes + (i*size)), ext.c_str());
strcpy((char*)(mimeTypes + (i*size) + (maxExtension+1)), type.c_str());

最佳答案

你混合 2 分配:

1) 管理 MIMETYPE 数组和

2) 管理字符数组

可能是(我不太明白你的目标):

struct MIMETYPE
{
char extension[const_ofmaxExtension];
char type[maxType];
};

最好以以下形式分配线性项:

new MIMETYPE[numTypes];

关于c++ - 为结构数组分配内存块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3333293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com