为结构中的字串数组配置内存[closed]

nqwrtyyt  于 2022-12-02  发布在  其他
关注(0)|答案(3)|浏览(142)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

3天前关闭。
Improve this question
所以我试着为struct中的字符串数组分配内存:这是一个结构:

typedef struct{
    int aisleNumber;
    char **aisleProducts;
}Aisle;

这就是我如何分配内存:

Aisle.aisleProducts = (aisleProducts*)malloc( sizeof(aisleProducts) );

现在,我只需要数组中的一个字符串的空间,因此我没有乘以大小。仍然不工作,我不知道为什么...
任何帮助都将不胜感激。

mmvthczy

mmvthczy1#

malloc调用是没有意义的。对于指针数组,您应该分配n * sizeof(char*),因为malloc返回指向第一个分配的元素的指针(它是一个指针),所以您不应该将结果强制转换为char*,而是将其视为char**
示例:

#include <stdlib.h>
aisles.aisleProducts = malloc( n * sizeof(*Aisle.aisleProducts) );

或同等产品:

#include <stdlib.h>
aisles.aisleProducts = malloc( n * sizeof(char*) );

或同等产品:

#include <stdlib.h>
aisles.aisleProducts = malloc( sizeof(char* [n]) );
gg58donl

gg58donl2#

它不起作用,因为sizeof(...)返回编译时常量值。您的结构正好是12个字节(至少在以64比特平台为目的时)。int值是4个字节,而指标如果你想为你的字符串分配更多的内存,那么你必须手动分配和赋值你的指针,可能是一个循环。假设你有4个字符串:

// Allocate space for the starting pointers
Aisle.aisleProducts = (char**) malloc(sizeof(char*) * 4);
// Then more space for each individual string (for convenience, let's give each one of them 64 bytes)
for (int i = 0; i < 4; i++)
{
    Aisle.aisleProducts[i] = (char*) malloc(sizeof(char) * 64);
}
// Assign your strings...

编辑:正如其他人已经注意到的,12个字节是结构体的理论大小,但在实践中,它将对齐到任意值。

s1ag04yj

s1ag04yj3#

你可以试试

Aisle* pAisle = (Aisle*)malloc(sizeof(Aisle));
pAisle->aisleProducts = (char**)malloc(sizeof(char*));

相关问题