[英]Branch condition evaluates to a garbage value when dereferencing a pointer to a pointer
[英]how does dereferencing a pointer return garbage value?
我找不到任何類似的東西,如果在此之前被問到任何類似的問題,請隨時關閉它。 我有一個定義如下所示的結構
typedef struct linked_list{
int * data;
struct linked_list *llink;
struct linked_list *rlink;
} List;
我有一個功能
List * getitem(List* first){
int temp_data ;
int * intPtr;
List * ptr = (List *) calloc(1, sizeof(List));
if ( ptr == NULL){
printf("Memory allocation failed");
exit(0);
}
ptr->data= (int*) calloc (1, sizeof(int));
if ( ptr->data == NULL) {
printf("Mem alloc failed");
exit(0);
}
// for now only allow int type
printf("Enter the data you need");
scanf("%d", &temp_data);
ptr->data = &temp_data;
printf("%d\n",*(ptr->data) );
if (first == NULL){
ptr->data= &temp_data;
ptr->llink = NULL;
ptr->rlink = NULL;
printf("pointer valu = %p \n", ptr);
printf("check data = %p \n", ptr->data);
printf("%d\n",*(ptr->data) );
return ptr;
} else{
first->llink= ptr;
ptr->rlink=first;
ptr->llink = NULL;
ptr->data = &temp_data;
printf("pointer valu = %p \n", ptr);
printf("check data = %p \n", ptr->data);
return ptr;
}
}
我將一個指針傳遞給函數 ** getitem(List* first) ** 分配一些值返回相同的值。 但是當我在 main 中取消引用它時,它會打印一些垃圾值。 我無法將相同的指針傳遞給另一個函數 ** display_items(List* first); ** 並使用它。我可能會遺漏一些簡單的東西,任何幫助將不勝感激。
int choice;
List * First= NULL;
for(;;){
printf("1: to enter");
printf("2: to display");
scanf("%d", &choice);
switch(choice){
case 1:
First = getitem( First);
printf("Checking if first actually has someting\n");
printf("%d\n",*(First->data));
break;
case 2:
display_items(First);
break;
default:
exit(0);
}
}
}
ptr->data= (int*) calloc (1, sizeof(int));
if ( ptr->data == NULL) {
printf("Mem alloc failed");
exit(0);
}
// for now only allow int type
printf("Enter the data you need");
scanf("%d", &temp_data);
ptr->data = &temp_data;
您分配內存並將指向它的指針存儲在ptr->data
,但隨后您泄漏了該內存並將ptr->data
更改為指向temp_data
。 所以在函數返回后, ptr->data
指向一個不再存在的對象——它是一個垃圾指針。 所以它指向一個垃圾值也就不足為奇了。
而不是ptr->data = &temp_data;
,你的意思是, *ptr->data = temp_data;
.
真的,您應該首先使用以下方法讀取您想要的數據,
scanf("%d", ptr->data);
.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.