2012-03-19 83 views
5

我是新來的C + +和編程,我正在寫一個小程序作爲一個任務的一部分,並得到它的工作,但我想讓代碼運行得更快,所以我試圖讓我的向量存儲一個指向結構的指針。指針,字符串和溢出錯誤

的結構是

struct info { 
    string all; 
    string word; 
} 

而我所做的是,試圖指定字符串「所有」的值;

info* v; 
v->all = str; 

和STR被定義爲

string str = "Hello"; 

,我在運行GDB是得到了錯誤;

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 

任何線索可能是什麼原因造成的?

回答

2

v未初始化。

讓它

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

但你真的應該表現出更多的代碼。目前尚不清楚,您正在嘗試做什麼以及如何存儲指針會使代碼運行得更快。

+0

記住約'刪除v',當它不再需要。 – 2012-03-19 08:53:15

+0

謝謝你的迴應。在製作一個指向信息的指針時,我特意加了一個'*'並忘記了'新'... – michcs 2012-03-19 09:08:03

1

info* v;只是定義了指向一些隨機的內存位置指針,使用它,你需要分配內存info,使這個指針指向這塊內存。你可以使用new這樣做:info* v = new info();。請注意,您需要通過執行delete v;來釋放內存。

0

你不能使用內存位置,除非它被分配。 info *v只創建一個指向內存位置的指針,並且目前指向垃圾。您必須使用new爲其分配內存。在new之後使用str爲其分配值。

,或者您也可以使用靜態內存分配