我找不到任何類似的東西,如果在此之前提出任何類似的問題,請隨時關閉它。我有一個定義如下所示的結構
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);
}
}
}
uj5u.com熱心網友回復:
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);。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/331927.html
上一篇:C大數乘法
下一篇:按位或和強制轉換運算元的轉換警告
