Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Các pro giúp em với

  1. #1
    Ngày gia nhập
    09 2019
    Bài viết
    3

    Mặc định Các pro giúp em với

    Mọi người cho em hỏi tại sao sau khi chạy đoạn chương trình sau thì con trỏ a vẫn có giá trị NULL khi trong hàm main và cái vùng nhớ em cấp phát trong hàm abc nó đi đâu về đâu?

    #include <stdio.h>
    #include <stdlib.h>

    void abc(char *a)
    {
    a=(char*)malloc(5);
    }
    int main()
    {
    char *a=NULL;
    abc(a);
    if (a!=NULL) puts("ok");
    free(a);
    fflush(stdin);
    getchar();
    return 0;
    }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    471

    Trích dẫn Nguyên bản được gửi bởi timer Xem bài viết
    Mọi người cho em hỏi tại sao sau khi chạy đoạn chương trình sau thì con trỏ a vẫn có giá trị NULL khi trong hàm main và cái vùng nhớ em cấp phát trong hàm abc nó đi đâu về đâu?

    #include <stdio.h>
    #include <stdlib.h>

    void abc(char *a)
    {
    a=(char*)malloc(5);
    }
    int main()
    {
    char *a=NULL;
    abc(a);
    if (a!=NULL) puts("ok");
    free(a);
    fflush(stdin);
    getchar();
    return 0;
    }
    Thì bộ nhớ bị rò rỉ chứ sao nữa
    Đây là vấn đề tham trị hay tham chiếu, và biến con trỏ cũng không khác biến thường
    Trước khi gọi abc, bạn gán a địa chỉ có chứa giá trị null.
    Nhưng do truyền theo kiểu tham trị nên sau khi khi hàm abc chạy a vẫn chứa địa chỉ cũ tức giá trị null
    Để có kết quả ok bạn phải sửa lại là
    "void abc(char*& a)"

  3. #3
    Ngày gia nhập
    09 2019
    Bài viết
    3

    thank
    cảm ơn bạn mình hiểu rồi
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn