gpt4 book ai didi

c - 使用指向结构的指针数组将结构的元素设置为随机 double 值

转载 作者:行者123 更新时间:2023-12-04 08:25:28 26 4
gpt4 key购买 nike

我正在尝试创建一个指向结构的指针数组
程序运行,但它只是说“段错误:11”
任何帮助将不胜感激

typedef struct
{
int id;
double x;
double y;
char name[30];
int named;
} Star;


Star *stars[10];


int bang (int n_stars)
{
if ((n_stars >= 1) && (n_stars <= 10))
{
for (int i = 0; i < n_stars; i++)
{
double x = rand() % 10;
double y = rand() % 10;
stars[i] = (Star*) malloc(sizeof(x) + sizeof(y));
stars[i]->x = x;
stars[i]->y = y;
free(stars[i]);
return 1;
}
}
else
{
return 0;
}
return 0;
}

最佳答案

为了论证的目的,让我们忽略结构对齐并假设一个目标(例如 x86),其中:sizeof(double) == 8 , 和 sizeof(int) == 4 .
现在,您正在分配一个大小为 16 字节的内存块:stars[i] = (Star*) malloc(sizeof(x) + sizeof(y));结构体的定义是:

typedef struct
{
int id;
double x;
double y;
char name[30];
int named;
} Star;
注意 y 的偏移量是 12 个字节。当你执行: stars[i]->y = y; y 的值写入地址 &stars[i] + 12 个字节。 Double 占用 8 个字节,这将溢出您的分配 (12+8 > 16),如上所述。
您很可能希望将关联更改为 stars[i] = malloc(sizeof(Star)); , 为您的结构分配适当的空间量。
编辑:
如果您打算在其他地方使用分配的数据,您应该删除对 free 的调用。 ,而是在程序中使用完数据后释放数据。 return下一行中的语句也可能是一个错误,因为它在第一次迭代时退出循环,这很可能不是您想要的。

关于c - 使用指向结构的指针数组将结构的元素设置为随机 double 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65281485/

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