שגיאת זיכרון בC

  • פותח הנושא nhfk
  • פורסם בתאריך

nhfk

משתמש סופר מקצוען
הנדסת תוכנה
עיצוב ואדריכלות פנים
C:
if(!strcmp(type,"exte"))
{
                printf("extern");

                printf("numOfLabel%d",numOfLabel);
if(numOfLabel==0)
{
la = (label*)malloc(sizeof(label));
}
                else
                {
la = (label*)realloc(la,(numOfLabel+1)*sizeof(label));
}
if(la != NULL)
{    
               printf("Put in 1");
i=skeepSpace(line,i+7);
nameLabel = findNameLabel(line,i,' ');
/*till here works fine*/
printf("namelllllll:%s",nameLabel);
la[numOfLabel].address = 0;
strcpy(la[numOfLabel].name,nameLabel);
la[numOfLabel].external = true;
numOfLabel++;
                        printf("Put in");
}
else
{
printf("eror! could not find more room!\n");
exit(0);
}
return;
}
מישהו עולה על משהו?
(תתעלמו מכל ההדפסות וההערות)
 

nhfk

משתמש סופר מקצוען
הנדסת תוכנה
עיצוב ואדריכלות פנים
מוכנה ורוצה לשלם למי שמבין ופותר לי את הבעיה
אני בתסכולייייםםםםםםםם
בבקשה עזרה
 

ירושל

משתמש מקצוען
בשגיאת זיכרון הכוונה להדפסה "Could not find more room" או במקום אחר? Exception כלשהו?
באיזו שורה מתרחשת השגיאה?
 

nhfk

משתמש סופר מקצוען
הנדסת תוכנה
עיצוב ואדריכלות פנים
לא שחררת את הזיכרון בשום מקום.
שחררתי במקום אחר

נראה לי שהשגיאה לא שם
אני צריכה מישהו שטוב בזה ויש לו זמן לבדוק בפרויקט איפה השגיאה
אני משלמת כמה שרוצים אם מוצאים
בבקשה זה מצווה אדירה
בשגיאת זיכרון הכוונה להדפסה "Could not find more room" או במקום אחר? Exception כלשהו?
באיזו שורה מתרחשת השגיאה?
אין לי מושגג
זה מאוד מוזר
הוא מסיים לעבור על הקובץ ואז עושה
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)

אם אני מריצה כמה פעמים ברצף פתאום הוא כן מצליח לסיים
לא ברור לי מה קורה שם
תסכולל
 

nhfk

משתמש סופר מקצוען
הנדסת תוכנה
עיצוב ואדריכלות פנים
ניסית לדבג?
ימקד אותך יותר....
לא יודעת איך מדבגים בסביבת עבודה הזו
אבל יש לי הדפסות כל שורה
וזה מפסיק בסוף הקובץ בעיקרון ואז פתאום בלי לשנות כלום הוא כן מתקדם כמה שורות
מצורף סרטון
 

קבצים מצורפים

  • פרוג.mp4
    5.5 MB

ירושל

משתמש מקצוען
ככל הנראה, יש חריגת זיכרון בכתיבה ל-la, אבל קשה להבין מהקוד החלקי.
תרצי להעלות את הפרויקט כ-zip?
 

nhfk

משתמש סופר מקצוען
הנדסת תוכנה
עיצוב ואדריכלות פנים
יש לך פונקציות שעובדות עם מחרוזות, בדקת שהן מסתיימות ב0?
וכן שאין גלישה מהמערך.
אני ינסה לעבור שוב
ככל הנראה, יש חריגת זיכרון בכתיבה ל-la, אבל קשה להבין מהקוד החלקי.
תרצי להעלות את הפרויקט כ-zip?
מעלה, תודה!

במיין שלחתי אותו להריץ את כל הקובץ firstLevel ואז רציתי להדפיס את טבלת הסמלים ואז את המילה second כדי לראות שהוא הדפיס
אז כשאני מריצה הוא נתקע לי או ממש בסוף הfirstLevel או אחרי שתי תוויות בטבלת הסמלים שגם הוא לא מצליח לשלוף כמו שצריך אז אולי הבעיה היא בקוד שמעדכן אותם

עשיתי הרבה הדפסות תוך כדי כדי לדעת איפה הוא נתקע
 

קבצים מצורפים

  • פרוג.rar
    KB 23.6 · צפיות: 14

ירושל

משתמש מקצוען
מה הפונקציה findNameLabel אמורה לעשות?
(תרצי לתת כתובת מייל ונמשיך באופן פרטי?)
 

ירושל

משתמש מקצוען
שיניתי קצת:
את הפונקציה findNameLabel שיניתי כך שהיא תקבל מחרוזת במקום להחזיר - זה קצת מפשט כי לא צריך להקצות ולשחרר.
חלק מהמחרוזות אתחלתי ב-NULL.
על הדרך שמתי בהערה שורות שגרמו לאזהרות של הקומפיילר והוספתי אופציה של make clean.

עדיין - לא בטוחה שהתכנית עובדת מבחינה לוגית (אין לי זמן להכנס לעומק).
לפחות היא לא קורסת.
נראה לי שהבעייה העיקרית הייתה בפונקציה findNameLabel שהחזירה מחרוזת שהוקצתה לוקאלית. ואז הייתה גלישת זיכרון כלשהי, כמו ש @הבריסקער הנודד מציע.
 

קבצים מצורפים

  • proj.rar
    KB 6.3 · צפיות: 6

nhfk

משתמש סופר מקצוען
הנדסת תוכנה
עיצוב ואדריכלות פנים
לא הסתכלתי לעומק, אבל זה האופי של בעיות זיכרון - מצביעים\ מערכים וכמובן מחרוזות.

תנסי להשים בהערה את כל ההדפסות. לראות אם זה יותר טוב
מחקתי כמעט את כולם
שיניתי קצת:
את הפונקציה findNameLabel שיניתי כך שהיא תקבל מחרוזת במקום להחזיר - זה קצת מפשט כי לא צריך להקצות ולשחרר.
חלק מהמחרוזות אתחלתי ב-NULL.
על הדרך שמתי בהערה שורות שגרמו לאזהרות של הקומפיילר והוספתי אופציה של make clean.

עדיין - לא בטוחה שהתכנית עובדת מבחינה לוגית (אין לי זמן להכנס לעומק).
לפחות היא לא קורסת.
נראה לי שהבעייה העיקרית הייתה בפונקציה findNameLabel שהחזירה מחרוזת שהוקצתה לוקאלית. ואז הייתה גלישת זיכרון כלשהי, כמו ש @הבריסקער הנודד מציע.
עכשיו הוא כאילו מדפיס את השורה האחרונה בfindNameLabel ואז נתקע
1598435302063.png


מכאן הוא קורא לפונקציה והשורה שהדגשתי בכחול הוא כבר לא מדפיס:
1598435397825.png
 

ירושל

משתמש מקצוען
מהי שורת ההרצה המדויקת? כשאני מריצה
קוד:
./myProject ps
הפלט שאני מקבלת הוא כמו בקובץ המצורף.
אם את מריצה עם gdb - מהו ה-backtrace בנפילה?
(מקישים bt או backtrace)
 

קבצים מצורפים

  • out.txt
    KB 2.5 · צפיות: 11

nhfk

משתמש סופר מקצוען
הנדסת תוכנה
עיצוב ואדריכלות פנים
מהי שורת ההרצה המדויקת? כשאני מריצה
קוד:
./myProject ps
הפלט שאני מקבלת הוא כמו בקובץ המצורף.
אם את מריצה עם gdb - מהו ה-backtrace בנפילה?
(מקישים bt או backtrace)
יש מצב שאני אשלח לך באישי קישור לזום?
אני ישלם לך על הזמן הזה
 

ירושל

משתמש מקצוען
@nhfk - לא, אבל תודה...
רק משתדלת לנסות פה ושם.
(ובכל מקרה עוד מעט אני מתנתקת).
 

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק קמט

א הַלְלוּיָהּ שִׁירוּ לַיהוָה שִׁיר חָדָשׁ תְּהִלָּתוֹ בִּקְהַל חֲסִידִים:ב יִשְׂמַח יִשְׂרָאֵל בְּעֹשָׂיו בְּנֵי צִיּוֹן יָגִילוּ בְמַלְכָּם:ג יְהַלְלוּ שְׁמוֹ בְמָחוֹל בְּתֹף וְכִנּוֹר יְזַמְּרוּ לוֹ:ד כִּי רוֹצֶה יְהוָה בְּעַמּוֹ יְפָאֵר עֲנָוִים בִּישׁוּעָה:ה יַעְלְזוּ חֲסִידִים בְּכָבוֹד יְרַנְּנוּ עַל מִשְׁכְּבוֹתָם:ו רוֹמְמוֹת אֵל בִּגְרוֹנָם וְחֶרֶב פִּיפִיּוֹת בְּיָדָם:ז לַעֲשׂוֹת נְקָמָה בַּגּוֹיִם תּוֹכֵחֹת בַּלְאֻמִּים:ח לֶאְסֹר מַלְכֵיהֶם בְּזִקִּים וְנִכְבְּדֵיהֶם בְּכַבְלֵי בַרְזֶל:ט לַעֲשׂוֹת בָּהֶם מִשְׁפָּט כָּתוּב הָדָר הוּא לְכָל חֲסִידָיו הַלְלוּיָהּ:
נקרא  12  פעמים

לוח מודעות

למעלה