สวัสดี ฉันมีปัญหา ฉันกำลังพยายามเริ่มต้นแฮชเทเบิลด้วยอาร์เรย์ที่มีรายการ แต่เมื่อฉันใช้ลูป for ข้อมูลทั้งหมดจะถูก "แชร์" ฉันต้องเริ่มต้นด้วยตนเองเช่นนั้น:
struct objec_listt A,B; // Initialization of 2 two structure A and B
INIT_LIST_HEAD(&A.list); // A is headlist
INIT_LIST_HEAD(&B.list); // B is headlist
hashtable->tab[0]= &A; // I insert A into the array
hashtable->tab[1]= &B; // I insert B into the array
insert(1,tab[0]); // insert 1, not real syntax
insert(2,tab[0]); // insert 2
insert(3,tab[1]); // insert 3
ตอนนี้ฉันพิมพ์ tab[0] และ tab[1] ด้วยฟังก์ชั่นของตัวเองและฉันก็เข้าใจ
แท็บ[0] = 1,2
แท็บ[2]= 3
โอเค มันได้ผลตามที่ฉันต้องการ
ถ้าฉันชอบแบบนั้น มันจะไม่ทำงาน :
for(i=0; i<2; i++)
{
struct objec_listt A;
INIT_LIST_HEAD(&A.list);
hashtable->tab[i] = &A
}
insert(1,tab[0]); // insert 1,
insert(2,tab[0]); // insert 2
insert(3,tab[1]); // insert 3
ถ้าฉันทำ printf :
แท็บ[0] : 1,2,3
แท็บ[1] : 1,2,3
ดังนั้นปัญหาก็เหมือนกับว่าฉันกำลังพยายามสร้าง "วัตถุจำนวนมาก" ที่จะเป็นส่วนหัวของรายการ และสำหรับแต่ละรายการ ฉันต้องเริ่มต้นอาร์เรย์ด้วยขนาด 100 ดังนั้นทำไมฉันถึงต้องจัดการกับการวนซ้ำ
ขอบคุณ !
scope
คุณต้องย้ายstruct objec_listt A;
ออกไปนอก for loop เนื่องจากมันถูกสร้างขึ้นภายในลูป เมื่อคุณออกจากบล็อคโค้ดนั้น มันก็จะไม่มีอยู่อีกต่อไป การประกาศเป็นแบบโลคัลสำหรับ for loop block ของโค้ด - person David C. Rankin   schedule 01.11.2015