נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: בעיה בפונקציה שמקבלת (void*)

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
Ratinho1
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 15 September 2006 בשעה 12:29 | IP רשוּם
ציטוט Ratinho1

אממ, קבלתי איזה תרגיל לעשות, הוא אמור למיין ע"י פונקציה ראשית אחת  גם int, גם double, וגם string..
זה מה שעשיתי:
http://rafb.net/paste/results/5gTU2L92.html
הוא לא מציג לי ארורים (חוץ משתי אזהרות, שלדעתי לא אמורות להפריע),
אבל ברגע שאני פותח את התוכנית, נראה כאילו ישנה גלישה מהזיכרון..
חזרה לתחילת העמוד הצג את כרטיס החבר של Ratinho1 חפש הודעות אחרות של Ratinho1 בקר בדף הבית של Ratinho1
 
Fate
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 25 October 2005
משתמש: מנותק/ת
הודעות: 571
נשלח בתאריך: 15 September 2006 בשעה 12:51 | IP רשוּם
ציטוט Fate

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


הצטרף / הצטרפה: 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 רשוּם
ציטוט Fate

א) אתה לא קורא לפונקציה, יש לך קוד משוכפל...
שורה 85 עד 91, ושורה 74 עד 76.

ב) memcpy מעתיק גוש זיכרון בגודל שאתה נותן לו ממקום אחד לאחר...
המקום שאליו אתה מעתיק, לא שייך לתוכנית שלך.
בשביל למנוע שגיאות כאלה בעתיד תמיד כדאי לאתחל מצביעים לNULL..
תשנה שורה 80,73 ל:
int * temp = NULL;
ותראה מה יקרה...

מה שאתה כן צריך לעשות זה להקצות זיכרון לtemp  לפני ניסיון העתקה אליו...
temp = malloc(type);
ואחר כך כשאתה מסיים להשתמש בזיכרון צריך גם לשחרר אותו עם
free(temp);


עריכה:
אני חושב שאם הוא עובד עם void* אז זה אומר שהוא עובד בC...
אין templates, וגם אין "true" בC...

חזרה לתחילת העמוד הצג את כרטיס החבר של Fate חפש הודעות אחרות של Fate
 
אורח
אורח
אורח


הצטרף / הצטרפה: 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 רשוּם
ציטוט Fate

אוי, באמת לא ראיתי את זה...
אם זה C++ אז יש פתרונות הרבה יותר טובים כמו שנאמר פה...
חזרה לתחילת העמוד הצג את כרטיס החבר של Fate חפש הודעות אחרות של Fate
 
Leak
משתמש מתחיל
משתמש מתחיל
סמל אישי

הצטרף / הצטרפה: 01 September 2006
משתמש: מנותק/ת
הודעות: 36
נשלח בתאריך: 16 September 2006 בשעה 16:08 | IP רשוּם
ציטוט Leak

אני כל ה"אורחים" שהגיבו בנושא הזה, משום ששכחתי את הסיסמא, אבל שיחזרתי אותה.
בכל מקרה, נחזור לנושא.
Rathino1, כפי שאני רואה אתה משתמש בשפת C עם שילוב של C++, זה לא מקובל, לפחות לא בצורה שאתה עושה את זה.
אם אתה רוצה להשתמש בפונקציות שנמצאות בשפת C, אתה יכול להוסיף את הספריות
הסטנדרטיות בשפת C.
לדוגמא שאתה רוצה להוסיף את המחלקה stdio.h, אתה יכול פשוט להוסיף את הספרייה ככה:
קוד:
#include <cstdio>

ומשנת 1997 (השנה בה יצא התקן ANSI החדש), מקובל לכתוב את הספריות הסטנדרטיות בC++ לא .h
לדוגמא:
קוד:
#include <iostream>

בתקן החדש הפונקציות והמחלקות עטופות ב namespace לכן יש צורך לכתוב
קוד:
using namespace std;

או להוסיף קידומת
קוד:
std::

לפני קריאה לכל מילה שמורה כמו cout,cin וכו'.

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

Leak.

חזרה לתחילת העמוד הצג את כרטיס החבר של Leak חפש הודעות אחרות של Leak
 

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

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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