Указатель, строка и ошибка переполнения - PullRequest
5 голосов
/ 19 марта 2012

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

Структура:

struct info {
    string all;
    string word;
}

И я пытался присвоить строке 'all' значение;

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

Любая подсказка относительно того, что может быть причиной этого?

Ответы [ 3 ]

2 голосов
/ 19 марта 2012

v не инициализируется.

Сделать это

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

Но вы действительно должны показать больше кода. Непонятно, что вы пытаетесь сделать и как хранение указателя заставит код работать быстрее.

1 голос
/ 19 марта 2012

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

0 голосов
/ 19 марта 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...