2011-09-23 22 views
6

Tôi có hai lớp, A và Bar, cả hai đều chia sẻ một tệp tiêu đề về cơ bản có Foo * foo trong đó. Lớp A khởi tạo thanh Bar * đối tượng. Điều này hoạt động tốt. Tuy nhiên, nếu tôi thực hiện sự khởi tạo của đối tượngTruy cập vị trí đọc vi phạm 0x00000000. từ khóa 'mới'?

Bar* bar = new Bar(); 

Tôi bị xâm phạm khi thanh cố gắng làm điều gì đó với foo. Tại sao điều này tạo nên sự khác biệt?

Nếu tôi không sử dụng 'mới', nó hoạt động tốt. Đây là lỗi:

Unhandled exception at 0x003c17ea in Direct3DTutorial7.exe: 0xC0000005: Access violation reading 
location 0x00000000. 

Cảm ơn.

+7

Bạn có thể bao gồm các tệp tiêu đề không? – riwalk

+1

Chạy nó trong trình gỡ rối, sử dụng callstack để tìm điểm của sự cố và thêm các phần mã có liên quan. –

+1

Điều này rất có thể có nghĩa là bạn đang cố gắng dereference một con trỏ null. – Jesper

Trả lời

13
0xC0000005: Access violation reading location 0x00000000. 

Điều này có nghĩa bạn đang dereferencing một con trỏ null, có khả năng trong constructor của Bar, hoặc trong một số mã khác gọi bằng constructor này. Sử dụng trình gỡ lỗi để xác định chính xác vị trí.

0

Tôi đoán bạn không phân bổ đối tượng Foo của mình. Vì nó là một biến toàn cầu, nó được khởi tạo bằng không khi khởi động chương trình, cho con trỏ tương ứng với một giá trị null.

0

Bạn có nhớ xây dựng một đối tượng Foo và gán nó cho con trỏ foo không? Có vẻ như nhà xây dựng Bar của bạn đang cố gắng làm điều gì đó với foo, nhưng bạn chưa tạo đối tượng Foo.

Các vấn đề liên quan