לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 16-10-2006, 00:13
  slimshady21 slimshady21 אינו מחובר  
 
חבר מתאריך: 12.03.06
הודעות: 102
בעיית הרצת פרוייקט בשפת C

שלום. התחלתי פרוייקט בשפת C , בקומפיילר DEV-CPP 4.9.9.2 , שהוא מורכב בעצם רק משני קבצים קטנים. אז הוא מתקמפל טוב, אבל כשאני מריץ אותו אני מקבל את הודעת השגיאה:
"Project.exe נתקל בבעיה ועליו להסגר, אנו מתנצלים על אי הנוחות".
בדקתי את זה עם הדיבאגר, והוא הקפיץ לי את ההודעה הזאתי:

[התמונה הבאה מגיעה מקישור שלא מתחיל ב https ולכן לא הוטמעה בדף כדי לשמור על https תקין:
http://img140.imageshack.us/img140/4784/tempop5.jpg]


שמחיפוש קטן הגעתי לפה: http://en.wikipedia.org/wiki/Segmentation_fault

לפי מה שהבנתי הכוונה פה זה שהתוכנית "פולשת" לזכרון שהוא לא מוקצה לה בעצם. אבל בדקתי מלא והתוכנית שלי בסדר גמור!
אבל הנה בכל זאת שני הקבצים, הם די קטנים (תעזבו את הקובץ שאתם רואים בתמונה, שיניתי אותו מעט):
A.c:
קוד:
#include <stdio.h> #include "A.h" int main() { STACK var1; push(&var1,3); push(&var1,5); printf("data1=%d\ndata2=%d\n",var1.data[0],var1.data[1]); getch(); return 0; }



B.c:
קוד:
#include "A.h" int isEmpty; int isFull; static void update(STACK *s) { isFull = s->top == MAX-1; isEmpty = s->top == 0; } void push(STACK *s, int x) { update(s); if (!isFull) s->data[s->top++] = x; } void pop(STACK *s, int *x) { update(s); if (!isEmpty) *x = s->data[--(s->top)]; } void init(STACK *s) { s->top = 0; }


כשבעצם A.H זה בעצם קובץ ממשק שמוגדר בו המבנה STACK , ואבי טיפוס של שלושת הפונקציות שמיוצאות לקובץ A.C . אם אתם צריכים את הקוד שלו תגידו.
מצטער שיצא ארוך....
ותודה לעוזרים!

נערך לאחרונה ע"י slimshady21 בתאריך 16-10-2006 בשעה 00:15.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 16-10-2006, 11:47
צלמית המשתמש של ם_O
  משתמש זכר ם_O ם_O אינו מחובר  
 
חבר מתאריך: 15.08.06
הודעות: 465
בתגובה להודעה מספר 1 שנכתבה על ידי slimshady21 שמתחילה ב "בעיית הרצת פרוייקט בשפת C"

קודם כל לא הגדרת פה שום מבנה STACK...אפשר להבין איך עשית את זה...ובכל מקרה אני לא רואה שהקצאת פה זיכרון לשום דבר, יהיה טוב אם תצרף את הגדרת STACK (אולי אתה עובד עם מחסנית סטטית, אם לא, מן הסתם הנ"ל זאת הבעיה)
אתה מממש מחסנית עם מערך, בכל מקרה...או שאתה מקצה סטטית ואז זה נורא לא גמיש, או שאתה מקצה דינמית וצריך לכתוב פונקציות "שחזור"....לא גמיש ולא נוח במיוחד,
אז את המחסנית תממש באמצעות רשימה מקושרת, כמו בנאדם, את המבנה של המחסנית תגדיר ככה
קוד:
typedef struct { node *top; } stack;

ואת טיפוס כל node כך
קוד:
typedef struct _node { dataType data; struct _node *next; } node;

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


לגבי יואב, סעיף 2 לא באמת משנה, כל עוד הזיכרון הדרוש מוקצה - זה פשוט יתחיל את ה"אינדקס" של המחסנית מ1 במקום מ0 (במידה והוא מממש אותה עם מערך)
_____________________________________
Any sufficiently advanced bug is indistinguishable from a feature

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 16-10-2006, 12:43
  slimshady21 slimshady21 אינו מחובר  
 
חבר מתאריך: 12.03.06
הודעות: 102
בתגובה להודעה מספר 1 שנכתבה על ידי slimshady21 שמתחילה ב "בעיית הרצת פרוייקט בשפת C"

אה, עכשיו הבנתי מה הבעיה- לא אתחלתי את המחסנית- זתומרת ל-TOP היה ערך לא ידוע (זבל), הייתי צריך לקרוא תחילה לפונקציה INIT . את האמת אני רק עכשיו התחלתי ללמוד על מחסניות, ואת התוכנית הזאת העתקתי מפה- http://cse.proj.ac.il/hebetim/june2002/moti.htm . (כמובן לא העתקתי כמו תוכי, אני מבין את כולה). הנה קובץ ה-A.H בו מוגדרת המחסנית:
קוד:
#define MAX 10 typedef struct { int top; int data[MAX]; }STACK; extern void push(STACK *s, int x); extern void pop(STACK *s, int *x); extern void init(STACK *s);



זה אכן מוגדר כסטטי. אבל לא הבנתי מה לא נוח בהקצאה דינמית במקום? פשוט מקטינים את המערך לא?....
וגם עדיין לא הבנתי למה בכלל צריך מחסנית, למה פשוט לא להגדיר רשימה מקושרת כפולה וזהו? וכל פעם להוציא/להכניס לאיבר האחרון ברשימה (TOP) ....

לגבי הקוד שרשמת שם- מה זה "node_" ? הוא לא מוגדר.
והטיפוס : "datatype" אתה מתכוון שאני יכול לשים במקומו איזה טיפוס שאני בוחר? (int, flaot , char...)
ולא ברור- למה להגדיר מבנה שלם שמכיל רק מצביע למבנה node ? לא עדיף פשוט להגדיר משתנה מסוג מצביע ל-node ולקרוא לו stack ?

yoavmatchulsky - תקנתי כבר לפי מה שאמרת...

נערך לאחרונה ע"י slimshady21 בתאריך 16-10-2006 בשעה 13:06.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 12:46

הדף נוצר ב 0.11 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר