הפונקציה realloc בC - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

הפונקציה realloc בC


BedB0y

Recommended Posts

מסיבות לא מובנות כשאני משתמש בה, התוכנית קורסת בזמן ריצה (או שאני מקבל שגיאה מוזרה מהvisual studio)

אם אני לא מוסיף 1 לגודל המערך החדש.

נגיד רציתי לעשות realloc למערך שהגודל החדש שלו יהיה 4, אם אני לא אתן לו 5 אני אקבל (ברוב המקרים, זה אפילו לא חד משמעי) איזה שגיאה מוזרה או קריסה.

לאו דווקא מחרוזות, אפילו struct חדש שאני יוצר.

לא שמתי לב בפעמים הקודמות, אבל עכשיו זה קרס כשנסיתי להקטין את המערך (להעיף את התאים הריקים)

זה אמור לעבוד ככה? יש חלופה לפונקציה הזאת?

עריכה : הוספתי תמונה של השגיאה הנוכחית. היא קופצת רק אם אני לא רושם בrealloc גודל שלפחות גדול ב1 מהמערך החדש. נסיתי לעשות project חדש אבל זה לא עזר

[attachment deleted by admin]

קישור לתוכן
שתף באתרים אחרים

http://dl.dropbox.com/u/24303191/func2.txt

קורס בפונקציה האחרונה בסוף בשורה של count+=1

שאלה נוספת, מערך של סטרקטים שחוזר מפונקציה (חוזרת כתובת ההתחלה)

אם אני עושה sizeof לכתובת ההתחלה של המערך אני מקבל את גודל הכתובת (4) ולא את גודל המערך, במה טעיתי?

תודה

קישור לתוכן
שתף באתרים אחרים

לא ברור לי למה אתה עושה realloc בכל איטרציה של הלולאה ב-StrtoMonom.

לשאלתך:

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

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

עוד כמה הערות כלליות:

הפונקציה CharToInt מיותרת כשקיימת הפונקציה הסטנדרטית atoi.

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

תשתמש ב-int main במקום void main, ודאג להחזיר 0 בסופה.

I've said it before and i'll say it again - אחרי if/for/while תמיד תמיד תמיד לפתוח סוגריים מסולסלים, גם אם זו רק שורה אחת.

דאג לשחרר את כל הזכרון שאתה מקצה כאשר אתה כבר לא צריך אותו יותר.

קישור לתוכן
שתף באתרים אחרים

http://dl.dropbox.com/u/24303191/func3.txt

הוספתי פונקצית מיון בועות שממיינת את המבנים לפי אחד השדות (power)

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

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

while(arr->power==arr[i+j]->power)

עשיתי בדיקה על שתי משתנים, מסתבר שזה בגלל שרק ב arr[0] היה ערך, בarr[1] הופיעו לי פתאום סימני שאלה, לא ברור לי לאן נעלמו הערכים

זה קשור אולי ל-swap? או שלא העברת את המערך כמו שצריך בפונקציה האחרונה?

תודה

עריכה : בדקתי והערכים של המערך כולם הולכים לאיבוד חוץ מהתא הראשון arr[0] בדיוק בכניסה לפונקציה האחרונה.

לי נראה שהעברתי את המערך כמו שצריך, מישהו יכול לעלות על הטעות?

קישור לתוכן
שתף באתרים אחרים

א. ערוך את ההודעה שלך ושים את הקוד בתוך טג קוד, כי עכשיו הקוד דופק את ההודעה.

ב. האופרטור <- שקול להפעלת * ואז .

כלומר:

a->x

זה כמו

(*a).x

ועכשיו תחשוב מה הבעיה עם השורה שעושה לך בעיות.

קישור לתוכן
שתף באתרים אחרים

אז איך זה אמור להיות?

הכנסתי את arr שהוא משתנה מטיפוס

Monom**

כלומר

arr[i]

הוא משתנה מטיפוס

Monom*

בגלל שהוא מצביע בשביל לגשת לשדות שלו אני צריך להפעיל את החץ במקום הנקודה,לא? ???

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...