כותב |
|
Ratinho1 אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 15 September 2006 בשעה 12:29 | | IP רשוּם
|
|
|
|
אממ, קבלתי איזה תרגיל לעשות, הוא אמור למיין ע"י פונקציה ראשית אחת גם int, גם double, וגם string.. זה מה שעשיתי: http://rafb.net/paste/results/5gTU2L92.html הוא לא מציג לי ארורים (חוץ משתי אזהרות, שלדעתי לא אמורות להפריע), אבל ברגע שאני פותח את התוכנית, נראה כאילו ישנה גלישה מהזיכרון..
|
חזרה לתחילת העמוד |
|
|
Fate פורומיסט על
הצטרף / הצטרפה: 25 October 2005
משתמש: מנותק/ת הודעות: 571
|
נשלח בתאריך: 15 September 2006 בשעה 12:51 | | IP רשוּם
|
|
|
|
יש לך פעמיים את אותה טעות... כשאתה מחליף בין האיברים, אתה מעתיק ממקום אחד לTemp.. כאשר Temp בכלל לא קיבל זיכרון, הוא מצביע למקום זבל שלא שייך לך.
|
חזרה לתחילת העמוד |
|
|
רטינו אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 15 September 2006 בשעה 13:22 | | IP רשוּם
|
|
|
|
אה אני יעני אמור לעשות memcpy(a,temp,type) ולא הפוך?
|
חזרה לתחילת העמוד |
|
|
רטינו אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 15 September 2006 בשעה 13:23 | | IP רשוּם
|
|
|
|
מצטער על הדאבל פוסט, פשוט אי אפשר לערוך כאורח לא נראה לי שזה בגלל זה, מכיוון שהוא מציג לי את השגיאה עוד לפני שאני קורא לפונקציה..
|
חזרה לתחילת העמוד |
|
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 15 September 2006 בשעה 14:11 | | IP רשוּם
|
|
|
|
לא יותר פשוט לבנות פונקציה יחידה עם template שמטפלת בכל הסוגים? במקום לכתוב 4 פונקציות ? לפי דעתי זה טימטום.. ומצביע על יכולת תיכנותית נמוכה מאוד. ויש לך שמה מקומות של מצביעים שיכלת להחליף בייחוסים, הרבה יותר יעיל בC++ ונוח. while(1)? while(true) מקובל על המתכנתים.
|
חזרה לתחילת העמוד |
|
|
Fate פורומיסט על
הצטרף / הצטרפה: 25 October 2005
משתמש: מנותק/ת הודעות: 571
|
נשלח בתאריך: 15 September 2006 בשעה 17:28 | | IP רשוּם
|
|
|
|
א) אתה לא קורא לפונקציה, יש לך קוד משוכפל... שורה 85 עד 91, ושורה 74 עד 76.
ב) memcpy מעתיק גוש זיכרון בגודל שאתה נותן לו ממקום אחד לאחר... המקום שאליו אתה מעתיק, לא שייך לתוכנית שלך. בשביל למנוע שגיאות כאלה בעתיד תמיד כדאי לאתחל מצביעים לNULL.. תשנה שורה 80,73 ל: int * temp = NULL; ותראה מה יקרה...
מה שאתה כן צריך לעשות זה להקצות זיכרון לtemp לפני ניסיון העתקה אליו... temp = malloc(type); ואחר כך כשאתה מסיים להשתמש בזיכרון צריך גם לשחרר אותו עם free(temp);
עריכה: אני חושב שאם הוא עובד עם void* אז זה אומר שהוא עובד בC... אין templates, וגם אין "true" בC...
|
חזרה לתחילת העמוד |
|
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 16 September 2006 בשעה 12:13 | | IP רשוּם
|
|
|
|
כן.. הוא עובד מגעיל, משלב C וC++ זה הפיל אותי. cout / cin.. ובגלל זה אמרתי לו להשתמש בתבניות שזה יחסוך את ה void* המגעיל
|
חזרה לתחילת העמוד |
|
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 16 September 2006 בשעה 12:14 | | IP רשוּם
|
|
|
|
iostream.h ?????????? מה אנחנו בשנת 96?
|
חזרה לתחילת העמוד |
|
|
Fate פורומיסט על
הצטרף / הצטרפה: 25 October 2005
משתמש: מנותק/ת הודעות: 571
|
נשלח בתאריך: 16 September 2006 בשעה 14:59 | | IP רשוּם
|
|
|
|
אוי, באמת לא ראיתי את זה... אם זה C++ אז יש פתרונות הרבה יותר טובים כמו שנאמר פה...
|
חזרה לתחילת העמוד |
|
|
Leak משתמש מתחיל
הצטרף / הצטרפה: 01 September 2006
משתמש: מנותק/ת הודעות: 36
|
נשלח בתאריך: 16 September 2006 בשעה 16:08 | | IP רשוּם
|
|
|
|
אני כל ה"אורחים" שהגיבו בנושא הזה, משום ששכחתי את הסיסמא, אבל שיחזרתי אותה. בכל מקרה, נחזור לנושא. Rathino1, כפי שאני רואה אתה משתמש בשפת C עם שילוב של C++, זה לא מקובל, לפחות לא בצורה שאתה עושה את זה. אם אתה רוצה להשתמש בפונקציות שנמצאות בשפת C, אתה יכול להוסיף את הספריות הסטנדרטיות בשפת C. לדוגמא שאתה רוצה להוסיף את המחלקה stdio.h, אתה יכול פשוט להוסיף את הספרייה ככה:
ומשנת 1997 (השנה בה יצא התקן ANSI החדש), מקובל לכתוב את הספריות הסטנדרטיות בC++ לא .h לדוגמא:
בתקן החדש הפונקציות והמחלקות עטופות ב namespace לכן יש צורך לכתוב
או להוסיף קידומת
לפני קריאה לכל מילה שמורה כמו cout,cin וכו'.
בקשר לקוד שלך, כמו שאמרתי מקודם, הוא לא יעיל, ולכן צריך לייעל אותו. אפשר להשתמש בתבניות, ייחוסים, והפונקציה "סוג" בשביל לפעול לכל סוג של משתנה לחוד. זה יחסוך שורות קוד, יהיה יותר יעיל, ויותר נקי ונוח לקרוא.
Leak.
|
חזרה לתחילת העמוד |
|
|