2012-03-19 4 views
5

Я новичок в C++ и программировании, и я пишу небольшую программу как часть задания и получил ее на работу, но я пытаюсь сделать код быстрее, поэтому я пытаясь заставить мой вектор хранить указатель на структуру.Ошибка указателя, строки и переполнения

структура является

struct info { 
    string all; 
    string word; 
} 

И что я сделал, пытаясь присвоить строку «все» значение;

info* v; 
v->all = 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', когда он больше не нужен. –

+0

Благодарим за отзыв. Сделав v указателем на информацию, я сознательно добавил «*» и забыл о «новом» ... – michcs

1

info* v; просто определяет указатель, который указывает на некоторое случайное место памяти, чтобы использовать его нужно выделить память для info и сделать этот момент указатель на эту память. Вы можете сделать это, используя new вот так: info* v = new info();. Обратите внимание, что вам нужно освободить память самостоятельно, выполнив delete v;.

0

Вы не можете использовать ячейку памяти, если она не выделена. info *v создает только указатель на ячейку памяти и в настоящее время указывает на нежелание. вам необходимо выделить память, используя new. после new Вы используете acn для использования значения str.

или вы можете также использовать распределение статической памяти

Смежные вопросы