我试图找出为什么当我向堆分配内存中的结构数组中的结构分配值时出现错误。
我有以下 C 结构:
typedef struct _Point{
int x;
int y;
}Point;
和一个 Point 数组:
typedef Point Sample[];
现在我想分配一个 Sample 数组,任何 Sample 都由 15 个点组成,我使用以下代码:
Sample *new_positions;
data.old_positions =(Sample*) malloc(sizeof(Point) * 15 * global.nsamples);
当我尝试将其与以下代码一起使用以分配值时,出现错误
data.old_positions[0][0].x=5;
问题出在哪里? :(
最佳答案
data.old_positions 只是单一维度 -
data.old_positions[0].x=5;
指定 Zeroith 项目。模拟二维比构建二维数组更好。
data.old_positions[0 * 15 + 0].x = 5;
(Sample *)malloc(...
有效地构造一个没有内容的一维数组。您将需要 malloc 第二个维度...
data.old_positions = (Sample *)malloc(sizeof(Sample) * global.nsamples)
for (int i = 0; i < global.nsamples; i++)
data.old_positions[i] = (Point*)malloc(sizeof(Point) * 15);
应该可以了。
关于c - 尝试找出在为数组分配的堆内存中分配值期间的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10935336/