Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Texture id nhận giá trị 3452816845 sau khi LoadGLTexture

  1. #1
    Ngày gia nhập
    10 2008
    Bài viết
    54

    Mặc định Texture id nhận giá trị 3452816845 sau khi LoadGLTexture

    Mình có class Texture như sau:
    C++ Code:
    1. class Texture
    2. {
    3. public:
    4.     char    textureFilePath[100];
    5.     GLuint  textureData;

    Ở một lớp khác, mình làm như sau:
    C++ Code:
    1. Texture t;
    2. t.SetTextureFilePath("nehe.bmp");
    3. t.InitGLTexture();
    thì quá trình InitGLTexture() okie.

    Nhưng mà khi tạo ra một mảng các đối tượng Texture thì lại ko dc:
    C++ Code:
    1. Texture *t = new Texture[n];
    2. for(i = 0;i < n;i++)
    3. {
    4.     t[i].SetTextureFilePath("nehe.bmp");
    5.     t[i].InitGLTexture();
    6. }
    cụ thể là t[i].textureData nhận giá trị 3452816845.
    Theo mình biết đây là giá trị mà compliers đẩy vào cho những biến chưa khởi tạo.
    Ai biết chỉ cho mình với.

  2. #2
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    697

    C++ Code:
    1. Texture *t = new Texture[n];
    Khi bạn khai báo câu lệnh này, thì mỗi thành phần của mảng sẽ được khởi tạo bởi default constructor.
    Bạn thử đưa constructor bạn viết lên xem nào.

  3. #3
    Ngày gia nhập
    10 2008
    Bài viết
    54

    Mình đã tìm đc nguyên nhân rồi , cái này không liên quan gì đến constructor hết.
    Giá trị 3452816845 được trình biên dịch đẩy vào trong các biến chưa đc khởi tạo, giúp ta có thể dễ dàng nhận dạng ra nó khi debug.

    Vấn đề của mình là, trong trường hợp thứ nhất, mình thử với 1 đối tượng Texture sau khi đã enable Texture_2D, còn trong trường hợp thứ 2 thì lại trước khi enable Texture_2D.
    Khi chưa enable Texture_2D thì việc InitGLTexture hoàn toàn không có nghĩa lý gì cả .
    Do đó, trước và sau khi Init, textureData đều nhận giá trị 3452816845. Làm mình mất 1 ngày rưỡi chả biết sai chỗ nào, trong khi quá trình Init là đúng, mà với 1 đối tượng thì đc, một mảng các đối tượng lại không, chẳng biết đường nào mà lần. Đến trưa mới nhận ra 2 trường hợp của mình ở làm ở hai vị trí khác nhau. :(
    Thanks bạn
    Đã được chỉnh sửa lần cuối bởi bachhaiduong : 18-10-2011 lúc 01:48 PM.

  4. #4
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    697

    Thực ra tùy compiler thôi, đa số compiler khởi tạo giá trị default là:
    int 0
    bool false
    ..........

  5. #5
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Trích dẫn Nguyên bản được gửi bởi G.Perelman Xem bài viết
    Thực ra tùy compiler thôi, đa số compiler khởi tạo giá trị default là:
    int 0
    bool false
    ..........
    Bạn cần phân biệt giữa default-init và zero-init. Các dữ liệu POD (định nghĩa POD bạn tự tìm hiểu nhá, nhưng các kiểu số bình thường và các kiểu con trỏ là POD) chỉ được zero-init khi nó là global hoặc static. Còn dữ liệu trên stack và dữ liệu thành viên của class sẽ được default-init, và bình thường default-init của POD là không làm gì cả ^^ tức là nó sẽ giữ giá trị có sẵn của ô nhớ đó.

    Ví dụ
    int* a = new int;
    int b; // non-global - ví dụ khai báo trong hàm main chẳng hạn
    int* c = new int[5];

    int* a = new int(); // ==> *a = 0
    int b = int(); // ==> b = 0
    int* c = new int[5]();
    là khác nhau. 3 cái dưới sẽ là zero-init và 3 cái trên là default-init.

    @bachhaiduong: theo như bạn nói thì mình nghĩ việc textureData nhận giá trị 3452816845 không liên quan gì đến compiler cả mà là cơ chế của openGL (Khi chưa enable Texture_2D thì việc InitGLTexture hoàn toàn không có nghĩa lý gì cả ==> cái này là thuộc cơ chế openGL rồi). Dù mình chưa làm việc trực tiếp với openGL toàn xài đồ ăn sẵn

  6. #6
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    697

    Mặc định Texture id nhận giá trị 3452816845 sau khi LoadGLTexture

    Oh, giờ mới biết có 2 kiểu default init và zero init.
    Thanks

Các đề tài tương tự

  1. Sửa máy tính, cài đặt windows, phần mềm tại nhà nhanh nhất, rẻ nhất, hiệu quả nhất …
    Gửi bởi hopluccc trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 08-07-2013, 02:07 PM
  2. Trả lời: 12
    Bài viết cuối: 25-10-2012, 02:48 AM
  3. Lập trình C++ OpenGL-Không load được Texture khi đưa vào Thread???
    Gửi bởi bachhaiduong trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 27-04-2012, 08:36 AM
  4. Game Lỗi SpriteBatch.end() trong XNA khi tạo xóa liên tục và nhiều texture 2D (cụ thể là các DrawableGameComponent)
    Gửi bởi caube_tamthuong_16 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 22-03-2012, 12:07 AM
  5. Bài tập C++ Nhập mảng 1 chiều, nếu phần tử nhập trùng nhau thì bắt nhập lại
    Gửi bởi danielh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 09-07-2011, 03:35 PM

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