首页 > 解决方案 > 为数组指针赋值

问题描述

在 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); 

标签: carrayspointers

解决方案


虽然其他答案提出了替代实现,但他们没有明确说明示例中的错误是什么:node *(*node)[N];定义了一个指针node,但没有对其进行初始化,因此node不指向分配的内存,并且该*node行中的后续(*node)[i] = newNode(i);行为未定义。要在不更改其余代码的情况下纠正此问题,您可以编写

    node *(*node)[N] = malloc(sizeof *node);

反而。


推荐阅读