c - 为数组指针赋值
问题描述
在 C 中,如果我有一个指向指针数组的指针,我如何将一个指向对象的指针分配为指针数组的元素?
我尝试过这样的事情:(注意:arrayPointer 是指向指针数组的指针)
(*arrayPointer)[i] = pointer;
但它没有用。它给了我段错误核心转储。然后我尝试了这个:
(*arrayPointer + i) = pointer;
它不编译。
这是一个类似于我的问题的示例:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
typedef struct node{
int index;
} node;
node* newNode(int i){
node* new = malloc(sizeof(node));
return new;
}
// Create a pointer to an array of node pointers
node *(*create(int N))[]{
int i;
node *(*node)[N];
for(i = 0; i < N; i++){
(*node)[i] = newNode(i);
}
return node;
}
int main(){
node *(*nodes)[8] = create(8);
}
我用gdb检查:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400599 in create (N=8) at main.c:20
20 (*node)[i] = newNode(i);
解决方案
虽然其他答案提出了替代实现,但他们没有明确说明示例中的错误是什么:node *(*node)[N];
定义了一个指针node
,但没有对其进行初始化,因此node
不指向分配的内存,并且该*node
行中的后续(*node)[i] = newNode(i);
行为未定义。要在不更改其余代码的情况下纠正此问题,您可以编写
node *(*node)[N] = malloc(sizeof *node);
反而。
推荐阅读
- c# - WebClient DownloadFileCompleted 事件未在最后一项中调用
- python - 使用多行作为 pandas 的列标题
- python - Python:为什么这个正则表达式不起作用?
- c# - Win 表单,选中时如何为单选按钮分配方法
- parsing - 如何使用 FastParse 处理文本表?
- c# - 在 .net core clobbers SQL Server 数据库中以逐字字符串 (@) 运行原始选择查询
- python - 使用 keras 保存模型
- javascript - 创建来自外国的服务人员
- sql - 从重叠的日期范围创建新的日期范围并分配一个 ID
- java - 如何检查音乐何时结束