פורסם 2008 בינואר 2117 שנים בסוף פונקציה אחרי הRETURN (בשורה של '{' ) הוא נותן לי את הארור הזהRun-Time Check Failure #2 - Stack around the variable 'value' was corrupted.ואין לי מושג מה גורם לזה בתוך הפונקציה יש לי עבודה של קריאה מקובץ למערך ובסוף אני מחזיר 1. הוא קורא מסיים את הקריאה של הקובץ בצורה טובה וסוגר את הקובץ. עובר את ה RETURN 1 ואחרי זה נותן את הארור. מה הבעיה?
פורסם 2008 בינואר 2117 שנים שנה את 1 ל 0 שאתה מחזיר 0 זה אומר שהתוכנה הסתיימה בהצלחה אם לא זה אומר שהיתה שגיאה
פורסם 2008 בינואר 2117 שנים יש לך מקרה קלאסי של buffer overflow. בקריאה שלך לתוך המערך אתה כנראה גולש מעבר לגבולות המערך.קח לדוגמה את הקוד הבא:char s[10];scanf("%s", s);אם המשתמש מכניס מחרוזת באורך 20, אז 10 התווים הראשונים ייכנסו לתוך המערך, ו-10 התווים הבאים (ליתר דיוק 11, כולל ה-0\) ידרכו על זכרון מעבר לגבולות המערך.וודא שאתה לא עובר את גבולות המערך. אם אתה עדיין מתקשה, תעלה לכאן את הקוד הרלבנטי.johnduo - הפונקציה שקוראת מתוך הקובץ מחזירה 1, לא התכנית.
פורסם 2008 בינואר 2117 שנים מחבר לא סביר, עשיתי על זה DEBUG ואין כלום.קוד?בבקשה:int readFile(char file_name[],treeA ts[]){ FILE *fin; char value; int i=0,sons_num; fin=fopen(file_name,"r"); if(fin==NULL || feof(fin)) { return 0; } while(!feof(fin)) { fscanf(fin,"%d",&value); settsinfo(&(ts[i]),value); fscanf(fin,"%d\n",&sons_num); setnumsons(&(ts[i]),sons_num); i++; } fclose(fin); return /*i*/1;}ts - מערך בגודל 100ויש 18 שורות בקובץ, משמע 18 תאים מתמלאים.שאר הSTRUCTים והפונקציות הנלוות טובות, אם אני יביא פה את כל מה שקשור זה רק יסבך תעיניינים.
פורסם 2008 בינואר 2117 שנים הנה הבעיה שלך:fscanf(fin,"%d",&value);הטיפוס של value הוא char, ואתה קורא לתוכו כאילו הוא int.
פורסם 2008 בינואר 2117 שנים ה-casting שיש שם הוא בין מצביעים, ולא בין int ו-char.זה נובע מכך שהפונקציה scanf לא יודעת את הטיפוסים שהיא מקבלת - היא פשוט מקבלת רשימה של מצביעים (*void), ומתייחסת אליהם לפי מה שהיא קיבלה ב-format string.תחשוב על הקוד הזה:char value;int* p = &value;*p = 0;השורה הראשונה דואגת להקצות בית אחד בלבד עבור value.השורה השנייה אולי תגרור אזהרה, אבל היא חוקית לחלוטין ב-C.בשורה השלישית, התכנית לא יודעת ש-p מצביע על מקום בזכרון שהוקצה בו רק בית אחד. מבחינתה, ב-p יושב int שהוא 4 בתים, ולכן היא תשים 0 בארבעת הבתים (ותגרום לדריכת זכרון כמו בתכנית שלך).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.