פורסם 2008 באוקטובר 1517 שנים מחבר שניצל, זה לא הבעיה, כשאתה עושה אריטמטיקה של פויינטרים צריך לדעת מה גודל יחידת הבסיס בשביל לדעת כמה לקדם את המצביע, ול void אין הגדרת גודל בסיס.בנימין, אם ה size הוא הגודל של המשתנה בבייטים, אז כמו שאמרתי, תעשה cast ל unsigned char * ל pointer ואז תעשה את שאר הפעולות.הבעיה שלי עם הרעיון של הקאסטינג הוא, שהפונקציה אמורה לטפל בכל סוגי המשתנים, אז אני צריך מצביע שמצביע על משתנה של בית (byte) אחד, אני חושב ש char הוא כזה, אני צודק?
פורסם 2008 באוקטובר 1517 שנים מחבר קראת את מה שהדגשתי ב bold במקרה ?רק עכשיו, סליחה על השאלה הדבילית...עריכה:עכשיו יש לי בעיה אחרת, עם ה casting:void sort(void *pointer, int size, int bytes, int (*bigger)(const void *a, const void *b)){ unsigned char* pointer2 = pointer;}(העתקתי רק קטע מהפונקציה sort, רק היא המשמעותית כאן)מה לא בסדר באיתחול הזה?
פורסם 2008 באוקטובר 1517 שנים שאתה לא מבצע את ההמרה של pointer באופן מפורש. אתה יכול בקוד הקודם פשוט לרשום (unsigned char *) לפני השימוש במילה pointer בשורה ההיא.
פורסם 2008 באוקטובר 1517 שנים מחבר שיניתי את זה עכשיו, וזה לא מציג תקלות, אני מקווה שזה יעבוד, תודה רבה בינתיים!עריכה:שגיאות זה באמת לא מציג, הבעיה היא שהוא נתקע עם שגיאת הרצה...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); .... .....}מישהו יכול להסביר לי למה הוא מתפרע?
פורסם 2008 באוקטובר 1517 שנים הוא לא מתפרע, אתה מתפרע, כדאי גם שתלמד להשתמש בדיבאגר ולעקוב אחרי ריצת התוכנית.. אתה מריץ MEMCPY לתוך משתנה לא מוקצה (TEMP).
פורסם 2008 באוקטובר 1517 שנים מחבר כנראה שלא הבנתי כ"כ טוב איך עובדת הפונקציה memcpy, תוכל להסביר לי?
פורסם 2008 באוקטובר 1517 שנים היא מעתיקה כמות מסיימת של מידע בזיכרון למקום אחר. בשביל זה צריך לתת לה גודל, כתובת מקור וכתובת יעד. אתה העברת לה את NULL ככתובת יעד דבר שלא יתכן. אתה צריך להעביר לה כתובת שהקצת לה זיכרון (בין אם זה משתנה בפונקציה שזה STACK או בזיכרון הגלובלי ה HEAP ע"י פעולות כמו MALLOC ו NEW).
פורסם 2008 באוקטובר 1517 שנים מחבר אנחנו למדנו הקצאת זיכרון ע"י new, הבעיה היא שאני צריך להגיד איזה סוג של משתנה אני מבקש להגדיר, ופה אין לי מושג!איך בדיוק אני כותב של שורת ה new שלי?
פורסם 2008 באוקטובר 1517 שנים חשוב מאוד לשחרר את הזיכרון שמוקצה באופן דינאמי בסוף השימוש שלו ע"י שימוש בפקודה delete[] כדי למנוע דליפות זיכרון. במקרה שלך עדיף לך להגדיר את temp למשל כunsigned char temp[bytes];בתוך הפונקציה וזהו.
פורסם 2008 באוקטובר 1517 שנים חשוב מאוד לשחרר את הזיכרון שמוקצה באופן דינאמי בסוף השימוש שלו ע"י שימוש בפקודה delete[] כדי למנוע דליפות זיכרון. במקרה שלך עדיף לך להגדיר את temp למשל כunsigned char temp[bytes];בתוך הפונקציה וזהו.זה יעבוד רק אם bytes הוא קבוע (או עם VLA ב-C99, עם קצת שינויים...).לאחראי הפורום - אם לא נראה לכם שאנשים משתמשים ב-size tag אז פשוט תורידו אותו. אל תכניסו לי מילים לפה. .
פורסם 2008 באוקטובר 1617 שנים מחבר סיימתי את התרגיל, תודה רבה לכל מי שעזר לי!אני אמחק מהנושא את כל קטעי הקוד הארוכים שצירפתי לעבודות שלי, אין בהם כבר צורך- אני אשאיר רק את הקוד שאליו מתייחסת ההודעה הבאה...
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.