עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

בעיה עם העברת פוינטרים ב- C

Featured Replies

פורסם

בניתי שני מבנים כאלה:

typedef struct
{
Node *first;
} List;
typedef struct
{
List words;
} Dictionary;

(Node זה עוד איזשהו מבנה שבניתי).

אבל כשאני שולח אותם לפונקציה פשוטה כמו זו:

void PrintDic(Dictionary *dic)
{
printf("%p\n", dic->words.first);
}

זה מדפיס לי כתובת שונה מהכתובת האמיתית של first (שהגדרתי אותה קודם לכן), כלומר ב- main רשום כתובת שונה ובפונקציה כתובת שונה.

בגלל זה אני לא יכול לגשת לתוכן של first.

אני לא מבין מה אני עושה לא נכון.

מישהו יכול לעזור לי?

פורסם
  • מחבר

אוקיי, הנה כל הקוד.

[attachment deleted by admin]

פורסם

הבעיה שלך היא בפונקציה CreateNewDictionary.

כשאתה מגדיר את המילון ככה: Dictionary d, אז הוא משתנה מקומי שנוצר על המחסנית. כשאתה יוצא מהפונקציה הנוכחית, המשתנה נמחק. למעשה, dic כרגע מצביע לאובייקט שלא קיים יותר (בעגה מקצועית זה נקרא dangling pointer).

כשאתה מתעסק עם מצביעים, אתה חייב להשתמש ב-malloc/free. כלומר:

Dictionary* d = (Dictionary*)malloc(sizeof(Dictionary));

כמובן אתה צריך לדאוג לשחרר אותו בסוף באמצעות free (תכנון נכון כמובן הוא לעשות פונקציה בשם FreeDictionary שתעשה את זה).

שים לב גם שלעשות ככה:

List words;
words.first = NULL;
d.words = words;

זה קצת מיותר - d.words כבר קיים, ואתה יכול ישר לגשת אליו, ולעשות ככה:

d.words.first = NULL

מה שאתה עושה כאן זה למעשה ליצור משתנה מטיפוס List, שם בו ערך מסוים, ואז מעתיק אותו לתוך d.words, כשלמעשה d.words כבר קיים ואתה יכול לכתוב ישר לתוכו.

פורסם
  • מחבר

אה, אוקיי.

תודה רבה על ההסבר והעזרה.

זה מסוג הבעיות שכשעוברים מ- C# ל- C נתקלים בהם.

ארכיון

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

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.