2012-03-19 47 views
5

Tôi mới dùng C++ và lập trình và tôi đang viết một chương trình nhỏ như một phần của bài tập và làm việc, nhưng tôi đang cố gắng làm cho mã chạy nhanh hơn, vì vậy tôi cố gắng để có được vector của tôi để lưu trữ một con trỏ đến một cấu trúc.Lỗi con trỏ, chuỗi và tràn

Các struct là

struct info { 
    string all; 
    string word; 
} 

Và những gì tôi đã làm được, cố gắng để gán chuỗi 'tất cả' một giá trị;

info* v; 
v->all = str; 

Và str được định nghĩa là

string str = "Hello"; 

Các lỗi mà tôi có khi chạy GDB là;

File "/usr/share/gdb/python/libstdcxx/v6/printers.py", line 469, in to_string 
return self.val['_M_dataplus']['_M_p'].string (encoding, length = len) 
OverflowError: signed integer is greater than maximum 

Mọi đầu mối về những gì có thể gây ra điều này?

Trả lời

2

v không được khởi tạo.

Làm cho nó

info* v = new info; 
v->all = str; 

Nhưng bạn thực sự cần hiển thị mã hơn. Nó không rõ ràng, những gì bạn đang cố gắng làm và cách lưu trữ một con trỏ sẽ làm cho mã chạy nhanh hơn.

+0

Và nhớ về 'xóa v', khi không còn cần thiết nữa. –

+0

Cảm ơn bạn đã phản hồi. Trong việc biến con trỏ thành thông tin, tôi cố tình thêm vào một '*' và quên đi 'mới' ... – michcs

1

info* v; chỉ định nghĩa con trỏ mà trỏ đến một số vị trí bộ nhớ ngẫu nhiên, để sử dụng nó, bạn cần phải phân bổ một bộ nhớ cho info và làm cho điểm con trỏ này vào bộ nhớ này. Bạn có thể làm điều đó bằng cách sử dụng new như thế này: info* v = new info();. Lưu ý rằng bạn cần tự giải phóng bộ nhớ bằng cách thực hiện delete v;.

0

Bạn không thể sử dụng vị trí bộ nhớ trừ khi được phân bổ. info *v chỉ tạo một con trỏ đến vị trí bộ nhớ và hiện tại trỏ đến thư mục. bạn phải cấp phát bộ nhớ cho nó bằng cách sử dụng new. sau new ing bạn acn sử dụng str để gán giá trị cho nó.

hoặc bạn cũng có thể sử dụng phân bổ bộ nhớ tĩnh

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