RAA نشر 14 أكتوبر 2022 أرسل تقرير نشر 14 أكتوبر 2022 لما بدي ادخل زيرو احتاج انو يطبعلي انو الليست فاضية وانو باقي العمليات ما حتتنفذ لكن ما بيحصل هيك ايه المشكلة 1 اقتباس
0 Kais Hasan نشر 14 أكتوبر 2022 أرسل تقرير نشر 14 أكتوبر 2022 إنك لا تقوم باختبار فيما إذا كان ال head يشير إلى ال NULL، يحدث أول خطأ في هذا المقطع: void swapFirstLast() { node *temp = head; int value = head->data; // هنا الخطأ while(temp!=NULL) { if(temp->next == NULL) { head->data = temp->data ; temp->data = value; } temp = temp->next; } }; يجب عليك دائما التحقق فيما إذا كان مؤشر ما يشير إلى ال NULL قبل الوصول إلى بياناته. بالإضافة إلى ذلك يجب عليك استعمال nullptr فقط بدل من NULL لأن هذا الموصى به، أو على الأقل لا تخلط بينهما في الاستعمال. اقتباس
0 RAA نشر 14 أكتوبر 2022 الكاتب أرسل تقرير نشر 14 أكتوبر 2022 بتاريخ 23 دقائق مضت قال Kais Hasan: إنك لا تقوم باختبار فيما إذا كان ال head يشير إلى ال NULL، يحدث أول خطأ في هذا المقطع: void swapFirstLast() { node *temp = head; int value = head->data; // هنا الخطأ while(temp!=NULL) { if(temp->next == NULL) { head->data = temp->data ; temp->data = value; } temp = temp->next; } }; يجب عليك دائما التحقق فيما إذا كان مؤشر ما يشير إلى ال NULL قبل الوصول إلى بياناته. بالإضافة إلى ذلك يجب عليك استعمال nullptr فقط بدل من NULL لأن هذا الموصى به، أو على الأقل لا تخلط بينهما في الاستعمال. متل هيك void swapFirstLast() { node* helpPtr = head; if(head==nullptr) { int value=head->data; cout << "Error : cannot swap(the list has less than two nodes)"; } int temp = helpPtr->data; while (helpPtr != nullptr) { if (helpPtr->next == nullptr) { int value = helpPtr->data; helpPtr->data; } helpPtr = helpPtr->next; } node* helpPtr2 = head; helpPtr2->data; }; 1 اقتباس
0 Kais Hasan نشر 14 أكتوبر 2022 أرسل تقرير نشر 14 أكتوبر 2022 بتاريخ 19 دقائق مضت قال RAA: متل هيك void swapFirstLast() { node* helpPtr = head; if(head==nullptr) { int value=head->data; cout << "Error : cannot swap(the list has less than two nodes)"; } int temp = helpPtr->data; while (helpPtr != nullptr) { if (helpPtr->next == nullptr) { int value = helpPtr->data; helpPtr->data; } helpPtr = helpPtr->next; } node* helpPtr2 = head; helpPtr2->data; }; نفس الخطأ يتكرر، عندما تقوم باستعمال معامل السهم فأنت تصل إلى البيانات الخاصة بما يؤشر عليه المؤشر، و لكن في حال كان nullptr فإنه لا يؤشر على شيء و بالتالي سيحدث خطأ. انت وضعت شرط تختبره إذا nullptr و قمت بالوصول إلى قيمته في ذلك الشرط مما يؤكد حدوث خطأ هناك. الحل هو كما يلي: void swapFirstLast() { if (head == nullptr) return; node *temp = head; int value = head->data; while(temp!= nullptr) { if(temp->next == nullptr) { head->data = temp->data ; temp->data = value; } temp = temp->next; } }; طبعاً لاحظ أنني استبدلت NULL ب nullptr، تذكر القيام بذلك من أجل كل الكود. يمكنك محاكاة ما سبق في كافة التوابع التي تقوم فيها بالوصول إلى مؤشر، تذكر القاعدة دائماً أنه قبل الوصول إلى المؤشر يجب التأكد من أنه يؤشر إلى غرض ما بالفعل و ليس إلى nullptr. اقتباس
السؤال
RAA
لما بدي ادخل زيرو احتاج انو يطبعلي انو الليست فاضية وانو باقي العمليات ما حتتنفذ لكن ما بيحصل هيك ايه المشكلة
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.