У меня есть следующий код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXNOME 60
typedef struct Periodo
{
char nome[MAXNOME];
struct Periodo *nextPeriodo;
} periodo;
void getNomePeriodo(char *nomePeriodo){
printf("Type name: ");
scanf("%s", nomePeriodo);
return;
}
void getMenuHeader(){
printf("\n\n");
}
void insertPeriodo(periodo **basePeriodo){
periodo novoPeriodo;
getNomePeriodo(novoPeriodo.nome);
novoPeriodo.nextPeriodo = NULL;
periodo *itrPeriodo = *basePeriodo;
while(itrPeriodo->nextPeriodo!=NULL){
itrPeriodo = itrPeriodo->nextPeriodo;
}
itrPeriodo->nextPeriodo = &novoPeriodo;
printf("OK!\n");
return;
}
int main(){
int *opcaoMenu = malloc(sizeof(int));
periodo *basePeriodo = malloc(sizeof(periodo));
insertPeriodo(&basePeriodo);
printf("%p\n", (basePeriodo)->nextPeriodo->nextPeriodo);
getMenuHeader();
printf("%p\n", (basePeriodo)->nextPeriodo->nextPeriodo);
return 0;
}
В принципе, проблема, с которой я сталкиваюсь, заключается в том, что похоже, что значение (basePeriodo)->nextPeriodo->nextPeriodo
меняется, когда я вызываю функцию getMenuHeader
, вывод I у меня есть это:
Type name: 2020
OK!
(nil)
0x7ffe9dd7d840
Я ожидаю, что значение (basePeriodo)->nextPeriodo->nextPeriodo
будет таким же, независимо от вызова функции, и будет NULL, как и до функции, но я понятия не имею, почему это После того, как я позвоню, кто-нибудь может объяснить, почему это происходит?