提问人:Hackerman 提问时间:9/18/2022 最后编辑:Hackerman 更新时间:9/18/2022 访问量:35
如何访问二维数组中结构体的属性
How to access the attributes of a struct in a 2D array
问:
我有一个简单的程序,可以制作结构体的 2d 数组。我想知道如何操作结构的属性。这是我的尝试;我不断出现分段错误,问题发生在 fillarr 方法中;
我的问题是,一旦数据进入 2D 数组,我不太明白如何操作数据。我知道数组是指针,我起初的假设是我可以做这样的事情
arr[h][w]->one = 'b';
我现在知道这显然是错误的,因为编译器真的不喜欢它。 现在,当我尝试时
arr[h][w].one = 'a'
编译器不会抱怨该语法,但这是触发我的分段错误的地方。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node {
char one;
char two;
};
typedef struct node node;
node** makeArr(int h, int w) {
printf("Making arr\n");
node** output = (node**)malloc(sizeof(node*) * h);
for (int i = 0; i < h; i++) {
output[i] = (node*)malloc(sizeof(node) * w);
}
return output;
}
void killarr(node **arr, int h, int w) {
printf("Killing arr\n");
for (int i = 0; i < h; i++) {
free(arr[i]);
}
free(arr);
}
void fillarr(node **arr, int h, int w) {
printf("Filling arr\n");
char x = 'a';
for (int i = 0 ; i < h; i++) {
for(int m = 0; m < w; m++){
arr[h][w].one = x++; // <- here exactly
arr[h][w].two = x++; // <- here too
}
}
}
int main(int argc, char *argv[]) {
int h = 10;
int w = 10;
node **arr = makeArr(h, w);
fillarr(arr, h, w);
killarr(arr, h, w);
}
答:
1赞
Chris
9/18/2022
#1
每次通过您正在访问的内循环 .但是,由于 和 是数组边界,因此您正在越界访问,从而导致未定义的行为。arr[h][w]
h
w
你的意思是:
arr[i][m].one = x++;
arr[i][m].two = x++;
评论
0赞
Hackerman
9/18/2022
是的,这一定是我几周来犯过的最愚蠢的错误。
1赞
Chris
9/18/2022
嘿,在看到那个错误之前,我就发现了这个东西,这恰恰表明这是漫长的一天。x
评论
x++
x
arr[h][w].one = x++;