結構何時開始在 C 語言中分配記憶體

發布 科技 2024-02-08
6個回答
  1. 匿名使用者2024-02-05

    定義結構:

    typedef struct _legaladdress_{

    char szip[16];

    char szreserve[32];

    legaladdress, *plegaladdress;

    定義指標變數:

    plegaladdress plegaladdress = null;

    直接使用時一定要分配空間:

    plegaladdress = (plegaladdress)malloc(sizeof(legaladdress));

    在以下情況下,您不需要分配空間:

    void func1(char* pbuffer){

    plegaladdress plegaladdress = null;

    plegaladdress = (plegaladdress)pbuffer;由於 pbuffer 已經有空間,只需將 plegaladdress 型別的指標指向它即可。 **。

  2. 匿名使用者2024-02-04

    結構只是您定義的一種資料型別,它稍微複雜一些。 記憶體分配時間與普通變數相同。

  3. 匿名使用者2024-02-03

    在 C++ 中,結構和類都是用於定義自定義型別的資料結構。 它們有一些相似之處,但也有一些不同之處。

    記憶體分配:在結構中,所有成員都是公共的,因此它們在記憶體中是連續分配的。

    在類中,成員可以宣告為私有或受保護,這意味著它們不能在記憶體中連續分布。 此外,乙個類還可以包含虛函式,這意味著它將有乙個虛函式表指標,用於儲存類的虛函式位址。

    會員電話:

    在結構中,您可以使用點運算子 (.) 或箭頭運算子 (-> 訪問結構的成員。 例如:

    struct point

    static int getvalue()

    int myclass::s_value = 0;

    int main()

    myclass::setvalue(5);

    int x = myclass::getvalue();

    std::cout 在此示例中,MyClass 類具有乙個靜態變數 S value 和三個靜態方法:setvalue、getvalue 和 constructor。 您可以使用 ::

    運算子在類外部呼叫這些靜態方法,如 main 函式所示。

    請注意,靜態變數必須在類外部定義和初始化。 在上面的示例中,靜態變數 s value 被定義為 int 型別並初始化為 0。

    另請注意,靜態方法不能訪問類的非靜態成員。 例如,如果 myclass 類具有非靜態變數 m 值,則無法在靜態方法中訪問它。

  4. 匿名使用者2024-02-02

    在 Linux 中,有三種方法可以分配 C++ 記憶體

    1)從靜態儲存區域分配。內存在編譯程式時分配,並且此內存在程式的整個持續時間內存在。 例如,全域性變數、靜態變數。

    2)在堆疊上建立。當乙個函式被執行時,可以在堆疊上建立函式中區域性變數的儲存單元,這些儲存單元會在函式執行結束時自動釋放。 堆疊記憶體分配操作內置於處理器的指令集中,效率很高,但分配的記憶體量有限。

    3)從堆中分配,也稱為動態記憶體分配。程式在執行時使用 malloc 或 new 請求所需的記憶體,程式設計師負責何時使用 free 或 delete 釋放記憶體。 動態記憶體的壽命由我們決定,使用起來非常靈活,但它也有最多的問題。

    常見記憶體錯誤:

    記憶體分配不成功,但已使用。

    記憶體分配成功,但在初始化之前被引用。

    記憶體分配成功並已初始化,但操作越過了記憶體的邊界。

    例如,在使用陣列時,經常會出現下標“1 more”或“1 less”。 特別是在 for 迴圈語句中,迴圈數很容易出錯,導致陣列操作越界。 )

    忘記釋放記憶體,導致記憶體洩漏。

    釋放記憶體,但繼續使用它。

  5. 匿名使用者2024-02-01

    realloc 呼叫<>需要兩個引數。

    此外,需要先檢測函式返回的結果,然後才能使用。 如果 realloc 無法申請記憶體,則返回 null

  6. 匿名使用者2024-01-31

    為什麼一定要用realloc,用你很熟悉的malloc或者calloc不是很香嗎?

相關回答
12個回答2024-02-08

這個問題需要了解系統在編譯時會給靜態變數分配記憶體,函式呼叫結束後不會釋放它們占用的記憶體單元,即變數的值是下次函式呼叫時上乙個函式呼叫的值。 >>>More