C 语言中将指针传递给 list 作为参数时出现分段错误

问题描述 投票:0回答:1

为什么当我将一个指向列表的指针作为函数的参数传递时,实际参数为NULL?我 100% 确定该列表不为 NULL(也因为所有列表都会发生这种情况),理论上,我传递它的方式是正确的。你能帮助我吗?下面,我提供了列表的声明、函数的声明、函数调用以及我打算对子例程进行的使用(由于变量结果为 NULL,所以失败了)。

` // 列表声明(我稍后填充;我确定它不是 NULL) carta_cfu *carta_cfu = NULL;

// Function declaration
Carta_cfu *carta_cfu_giocata(Carta_cfu **mano, Carta_cfu *carte_giocate, int n_ostacoli, Carta_cfu **mazzo_scarti, Carta_cfu **mazzo_pesca);

// Function call
giocatore = turnazione(giocatore, n_turno, n_giocatori, carta_ostacolo, NUM_OSTACOLI, &carta_cfu, &scarti);

// The point where I want to use the passed variable, but a segmentation fault occurs
printf("\n %d", (*mazzo_pesca)->num_cfu);


//structure
typedef struct carta_cfu {
    char nome_carta[DIM_STR_C];
    int num_cfu;
    Effetto effetto;
    struct carta_cfu *next;
} Carta_cfu;`

我尝试修改指针运算符(&、*)的用法,但它只会产生其他问题。我在函数调用之前使用了 printf,在 main 中,只是为了知道变量是否为 NULL(它不是)。

c list function struct segmentation-fault
1个回答
0
投票

也许您将错误的指针传递给列表。

以下是您应该知道的一些要点:

  1. 初始化:确保列表指针已正确初始化。在您的情况下,

    carta_cfu
    似乎被初始化为
    NULL
    。在将其传递给任何函数之前,请确保它已正确初始化并指向有效的内存。

  2. 指针到指针:当您将指针传递给列表指针 (

    Carta_cfu **mazzo_pesca
    ) 时,请确保在函数中正确处理它。如果您要修改指针本身(例如重新分配内存或更改其指向的位置),则需要将其作为指针传递给指针。

  3. 内存分配:确保为列表条目分配内存,并且正确处理内存分配和释放。如果您要为列表条目动态分配内存,请确保您没有访问尚未分配或已释放的内存。

  4. Access 中的段错误:您在
  5. printf("\n %d", (*mazzo_pesca)->num_cfu);

    处遇到的分段错误表明

    mazzo_pesca
    可能指向无效内存。仔细检查它是否被正确分配以及它指向的内存是否有效,因此逐步调试,并检查程序中各个位置的指针状态。
    
    

  6. 如果问题仍然存在,请考虑提供更多背景信息或最小的、可重现的示例,这可以帮助查明确切的问题。

© www.soinside.com 2019 - 2024. All rights reserved.