c - c中的二维结构数组
问题描述
我正在尝试制作一个二维数组,其中的每个点都将包含 C 中的三个整数。这是我的代码:
typedef struct node
{
int path;
int y;
int z;
}node;
typedef struct graph
{
node *matrix[10][10];
}graph;
int main(int argc, char** argv)
{
graph*map=malloc(sizeof(graph));
map->matrix[0][0]->path=1;
printf("%d",map->matrix[0][0]->path);
}
当我运行它时,我得到一个隔离错误,这是我遗漏的东西吗?
解决方案
[使用 OP 编辑之前的定义]
您提供的代码无法编译,因为矩阵定义为
node *matrix[10][10];
不兼容
matrix[0].path
但有
graph*map=malloc(sizeof(graph));
不为矩阵中的元素分配内存,所以做类似的事情(与你的定义兼容):
map->matrix[0][0]->x=1;
您取消引用具有未定义行为的未初始化指针(您的分段错误)
您还需要初始化矩阵中的指针,先验分配内存,例如(至少):
map->matrix[0][0] = malloc(sizeof(node));
或者不要使用具有以下内容的指针:
node matrix[10][10];
推荐阅读
- css - There is css animation which named 'for_box2' does not work correnctly
- java - 如何使用可完成的未来异步运行方法
- c# - 我希望我的页面以 2 条路线打开。我应该怎么办
- angular - How to perform CRUD operations on list observable using async pipe in Angular?
- javascript - How to show modal popup if condition is true in angular 8?
- facebook-graph-api - 尽管我是应用程序和页面的管理员,但无法获得页面喜欢
- wordpress - 如何在本地安装 WordPress 以开发多个网站
- bixby - Bixby 操作中的 type(fetch) 和 type(search) 有什么区别?
- sql - 如何知道数据来自分区文件组或正在读取表中的总记录
- paypal - 如果贝宝计划具有“非活动”状态?