שאלה, תכנות ב C++ - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שאלה, תכנות ב C++


binyamin1001

Recommended Posts

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

בנימין, אם ה size הוא הגודל של המשתנה בבייטים, אז כמו שאמרתי, תעשה cast ל unsigned char * ל pointer ואז תעשה את שאר הפעולות.

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

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

קראת את מה שהדגשתי ב bold במקרה ?

רק עכשיו, סליחה על השאלה הדבילית...

עריכה:

עכשיו יש לי בעיה אחרת, עם ה casting:


void sort(void *pointer, int size, int bytes, int (*bigger)(const void *a, const void *b))
{
unsigned char* pointer2 = pointer;
}

(העתקתי רק קטע מהפונקציה sort, רק היא המשמעותית כאן)

מה לא בסדר באיתחול הזה?

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

שיניתי את זה עכשיו, וזה לא מציג תקלות, אני מקווה שזה יעבוד, תודה רבה בינתיים!

עריכה:

שגיאות זה באמת לא מציג, הבעיה היא שהוא נתקע עם שגיאת הרצה...



void sort(void *pointer, int size, int bytes, int (*bigger)(const void *a, const void *b))
{
unsigned char* temp = NULL;
.... .....
memcpy(temp, (pointer2+j), bytes);
memcpy((pointer2+j), (pointer2+j+bytes), bytes);
memcpy((pointer2+j+bytes), temp, bytes);
.... .....
}

מישהו יכול להסביר לי למה הוא מתפרע?

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

היא מעתיקה כמות מסיימת של מידע בזיכרון למקום אחר. בשביל זה צריך לתת לה גודל, כתובת מקור וכתובת יעד. אתה העברת לה את NULL ככתובת יעד דבר שלא יתכן. אתה צריך להעביר לה כתובת שהקצת לה (בין אם זה משתנה בפונקציה שזה STACK או בזיכרון הגלובלי ה HEAP ע"י פעולות כמו MALLOC ו NEW).

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

חשוב מאוד לשחרר את הזיכרון שמוקצה באופן דינאמי בסוף השימוש שלו ע"י שימוש בפקודה delete[] כדי למנוע דליפות . במקרה שלך עדיף לך להגדיר את temp למשל כ


unsigned char temp[bytes];

בתוך הפונקציה וזהו.

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

חשוב מאוד לשחרר את הזיכרון שמוקצה באופן דינאמי בסוף השימוש שלו ע"י שימוש בפקודה delete[] כדי למנוע דליפות . במקרה שלך עדיף לך להגדיר את temp למשל כ


unsigned char temp[bytes];

בתוך הפונקציה וזהו.

זה יעבוד רק אם bytes הוא קבוע (או עם VLA ב-C99, עם קצת שינויים...).

לאחראי הפורום - אם לא נראה לכם שאנשים משתמשים ב-size tag אז פשוט תורידו אותו. אל תכניסו לי מילים לפה. .

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

סיימתי את התרגיל, תודה רבה לכל מי שעזר לי!

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

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

ארכיון

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

×
  • צור חדש...