为什么当我将一个指向列表的指针作为函数的参数传递时,实际参数为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(它不是)。
也许您将错误的指针传递给列表。
以下是您应该知道的一些要点:
初始化:确保列表指针已正确初始化。在您的情况下,
carta_cfu
似乎被初始化为 NULL
。在将其传递给任何函数之前,请确保它已正确初始化并指向有效的内存。
指针到指针:当您将指针传递给列表指针 (
Carta_cfu **mazzo_pesca
) 时,请确保在函数中正确处理它。如果您要修改指针本身(例如重新分配内存或更改其指向的位置),则需要将其作为指针传递给指针。
内存分配:确保为列表条目分配内存,并且正确处理内存分配和释放。如果您要为列表条目动态分配内存,请确保您没有访问尚未分配或已释放的内存。
printf("\n %d", (*mazzo_pesca)->num_cfu);
处遇到的分段错误表明
mazzo_pesca
可能指向无效内存。仔细检查它是否被正确分配以及它指向的内存是否有效,因此逐步调试,并检查程序中各个位置的指针状态。