תוכן BuziCon - HWzone פורומים
עבור לתוכן
  • צור חשבון

BuziCon

משתמש רשום
  • מספר הודעות

    9
  • הצטרפות

  • ביקר לאחרונה

הודעות שנפתחו על-ידי BuziCon

  1. ציטוט של Runny

    למקרים מסוג זה אני מאד מחבב את PyBind11

    אוקי. אז בחרתי בספרייה הזו, הורדתי אותה וכו .כל מה שצריך , על פי הסרטון הזה:https://www.youtube.com/watch?v=D4cKL0HoN1U&ab_channel=TigerPunchSportsClubTigerPunchSportsClub

    רק הבעיה היא, שיש לי שם

     Exception thrown at 0x00007FF8FEDB44C3 (python37.dll) in pybind11Example.pyd: 0xC0000005: Access violation reading location 0x0000000000000008

    כל פעם שאני מריץ.

    ונקודה נוספת היא, שחסר לי קובץ python37_d.dll.

    הוא לא נמצא בקובץ פייתון של הvisual studio.(אבל מהבחינה הזו אני עוד מסתדר כי אני על release mode)

    יש לך מידע כיצד לפתור את הבעיה?

  2. אני בניתי תוכנית בc++ של מערכת קבלה למוסד.(כחלק מהאקטון , כך שאין שאל תשאלו למה בc++ וכו')

    והוספתי סקריפט בפייתון ששולח מייל לצורך מסוים.

    הפייתון שולח מייל ע"י שהתוכנית בc++ מפעילה את הקובץ בפייתון על ידי הcmd.

    עכשיו רציתי לשאול, אם יש דרך נורמלית יותר לעשות זאת, כיון שלמעשה אני לא יכול לדעת מה התוכנית בפייתון שלחה(נניח קוד אבטחה) או לשלוט על להיכן התוכנית בפייתון תשלח את המייל.(כי אני מפעיל את התסקיפט דרך הcmd, כלומר שישנה כבר תוכנית מובנית שc++ מריץ אותה.)

    אני עובד עם VS 2019

    תודה  

  3. #include <iostream>
    #include<stdio.h>
    using namespace std;
    
    
    
    struct Node {
    	int data;
    	Node* next;
    	Node* prev;
    };
    struct List {
    	Node* head;
    	Node* tail;
    };
    
    void Insert(List h, int new_data) {
    
    	struct Node newNode;
    
    	newNode.data = new_data;
    
    
    	if (h.head == NULL) {
    		newNode.next = NULL;
    		newNode.prev = NULL;
    		
    		h.head = &newNode;
            //its will be point to the last node in list
    		h.tail = &newNode;
    	}
    	else {
        //"the first node will point(prev) to new node"
    		h.head->prev = &newNode;
            //the new node will point(next) to the first node
    		newNode.next = h.head;
    		newNode.prev = NULL;
            //the head will point to the new node,and its will be first now
    		h.head = &newNode;
    	}
    }
    
    void displayList(struct List h)
    {
    	//cout << h.head->data;
    
    }
    
    void main()
    {
    	struct List list;
    	list.head = NULL;
    	list.tail = NULL;
    	Insert(list, 23);
    	Insert(list, 234);
    
    	displayList(list);
    }

    אוקי..

    אז זה הקוד, והוא מתקפל.

    הבעיה היא כמו שאמרת, שכל insert יוצר לי העתק.

     

  4. #include <list> 
    #include <iostream>
    #include<stdio.h>
    using namespace std;
    
    
    
    struct Node {
    	int data;
    	Node* next;
    	Node* prev;
    };
    struct List {
    	Node* head;
    	Node* tail;
    };
    
    void Insert(List* h, int new_data) {
    
    	struct Node newNode;
    
    	newNode.data = new_data;
    
    
    	if (h.head == NULL) {
    		newNode.next = NULL;
    		newNode.prev = NULL;
    		
    		h.head = &newNode;
    		h.tail = &newNode;
    	}
    	else {
    		h.head->prev = &newNode;
    		newNode.next = h.head;
    		newNode.prev = NULL;
    		h.head = &newNode;
    	}
    }
    
    void displayList(struct List& h)
    {
    
    }
    
    void main()
    {
    	struct List list;
    	list.head = NULL;
    	list.tail = NULL;
    	Insert(list, 23);
    	Insert(list, 234);
    
    	displayList(list);
    }

    זה הקוד הכתוב

  5. שלום, אני בונה רשימה מקושרת דו כיוונית בשפת c++ , 

    על ידי יצירת אובייקט שקרוי List שהוא אמור להצביע לתחילת הרשימה וסוף הרשימה,

    ויצירת node שאמור להצביע לזה שלפניו וזה שאחריו.

    הבעיה, בפונקציה  של Insert (הכנסה לתחילת הרשימה), עשיתי (רוצה לעשות בכל אופן..)שהוא יקבל את הList , ויבנה node חדש , במקרה הראשון אם הlist מצביע לnull, אז שיצביע עליו,

    ואם לא מצביע לnull, אז שהאיבר החדש, יצביע למה שהצביע הlist, והlist יצביע עליו.מאוד פשוט.

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

    ניסיתי לשלוח את הכתובת אבל זה אומר שאני שולח מצביע , ואז המצביעים שיש בתוך הlist אינלי גישה אליהם או משו.(שם עיקר האי הבנה שלי)

    להלן הקוד:

    #include <list> 
    #include <iostream>
    #include<stdio.h>
    using namespace std;

    struct Node {
        int data;
        Node* next;
        Node* prev;
    };
    struct List {
        Node* head;
        Node* tail;
    };

    void Insert(List h, int new_data) {

        struct Node newNode;

        newNode.data = new_data;


        if (h.head == NULL) {
            newNode.next = NULL;
            newNode.prev = NULL;
            
            h.head = &newNode;
            h.tail = &newNode;
        }
        else {
            h.head->prev = &newNode;
            newNode.next = h.head;
            newNode.prev = NULL;
            h.head = &newNode;
        }
    }

    void displayList(struct List& h)
    {
        //cout << h.head->data;

    }

    void main()
    {
        struct List list;
        list.head = NULL;
        list.tail = NULL;
        Insert(list, 23);
        Insert(list, 234);

        displayList(list);
    }
    בקוד הזה הוא יוצר כל פעם list חדש.

    ואם אני משנה בפונקציית הinsert ל

    void Insert(List* h, int new_data) {

        struct Node newNode;

        newNode.data = new_data;


        if (h.head == NULL) {
            newNode.next = NULL;
            newNode.prev = NULL;
            
            h.head = &newNode;
            h.tail = &newNode;
        }
        else {
            h.head->prev = &newNode;
            newNode.next = h.head;
            newNode.prev = NULL;
            h.head = &newNode;
        }
    }

    זה יוצר בעיה בכל h.head וh.tail.

    עזרה?

     

×
  • צור חדש...