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

  • פותח הנושא nhfk
  • פורסם בתאריך
  • הוסף לסימניות
  • #1
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;
}
מישהו עולה על משהו?
(תתעלמו מכל ההדפסות וההערות)
 
  • הוסף לסימניות
  • #2
מוכנה ורוצה לשלם למי שמבין ופותר לי את הבעיה
אני בתסכולייייםםםםםםםם
בבקשה עזרה
 
  • הוסף לסימניות
  • #3
בשגיאת זיכרון הכוונה להדפסה "Could not find more room" או במקום אחר? Exception כלשהו?
באיזו שורה מתרחשת השגיאה?
 
  • הוסף לסימניות
  • #4
לא שחררת את הזיכרון בשום מקום.
 
  • הוסף לסימניות
  • #5
לא שחררת את הזיכרון בשום מקום.
שחררתי במקום אחר

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

אם אני מריצה כמה פעמים ברצף פתאום הוא כן מצליח לסיים
לא ברור לי מה קורה שם
תסכולל
 
  • הוסף לסימניות
  • #6
אין לי מושגג
זה מאוד מוזר
הוא מסיים לעבור על הקובץ ואז עושה
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)
ניסית לדבג?
ימקד אותך יותר....
 
  • הוסף לסימניות
  • #7
ניסית לדבג?
ימקד אותך יותר....
לא יודעת איך מדבגים בסביבת עבודה הזו
אבל יש לי הדפסות כל שורה
וזה מפסיק בסוף הקובץ בעיקרון ואז פתאום בלי לשנות כלום הוא כן מתקדם כמה שורות
מצורף סרטון
 
  • הוסף לסימניות
  • #8
יש לך פונקציות שעובדות עם מחרוזות, בדקת שהן מסתיימות ב0?
וכן שאין גלישה מהמערך.
 
  • הוסף לסימניות
  • #9
ככל הנראה, יש חריגת זיכרון בכתיבה ל-la, אבל קשה להבין מהקוד החלקי.
תרצי להעלות את הפרויקט כ-zip?
 
  • הוסף לסימניות
  • #10
יש לך פונקציות שעובדות עם מחרוזות, בדקת שהן מסתיימות ב0?
וכן שאין גלישה מהמערך.
אני ינסה לעבור שוב
ככל הנראה, יש חריגת זיכרון בכתיבה ל-la, אבל קשה להבין מהקוד החלקי.
תרצי להעלות את הפרויקט כ-zip?
מעלה, תודה!

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

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

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

  • פרוג.rar
    KB 23.6 · צפיות: 30
  • הוסף לסימניות
  • #11
מה הפונקציה findNameLabel אמורה לעשות?
(תרצי לתת כתובת מייל ונמשיך באופן פרטי?)
 
  • הוסף לסימניות
  • #12
  • הוסף לסימניות
  • #15
שיניתי קצת:
את הפונקציה findNameLabel שיניתי כך שהיא תקבל מחרוזת במקום להחזיר - זה קצת מפשט כי לא צריך להקצות ולשחרר.
חלק מהמחרוזות אתחלתי ב-NULL.
על הדרך שמתי בהערה שורות שגרמו לאזהרות של הקומפיילר והוספתי אופציה של make clean.

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

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

  • proj.rar
    KB 6.3 · צפיות: 23
  • הוסף לסימניות
  • #17
לא הסתכלתי לעומק, אבל זה האופי של בעיות זיכרון - מצביעים\ מערכים וכמובן מחרוזות.

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

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


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

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

  • out.txt
    KB 2.5 · צפיות: 53
  • הוסף לסימניות
  • #19
מהי שורת ההרצה המדויקת? כשאני מריצה
קוד:
./myProject ps
הפלט שאני מקבלת הוא כמו בקובץ המצורף.
אם את מריצה עם gdb - מהו ה-backtrace בנפילה?
(מקישים bt או backtrace)
יש מצב שאני אשלח לך באישי קישור לזום?
אני ישלם לך על הזמן הזה
 
  • הוסף לסימניות
  • #20
@nhfk - לא, אבל תודה...
רק משתדלת לנסות פה ושם.
(ובכל מקרה עוד מעט אני מתנתקת).
 

פרוגבוט

תוכן שיווקי
פרסומת
למעלה