Печать значения int Pointer - PullRequest
       9

Печать значения int Pointer

4 голосов
/ 11 февраля 2012

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

Мой указатель - это список указателей, например: list<int*> pointerList

Например, мой метод возвращает:

int* end() { return (pointerList.back()); }

Вот как я его называю.

int* totry = ca.end();
cout << *totry;

Это печать адреса памяти, а не значения.У кого-нибудь есть идеи, как решить эту проблему?

Заранее спасибо!

РЕДАКТИРОВАТЬ: Вот на что указывают указатели int: У меня есть список значений, таких как [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] ИУ меня есть список указателей, которые указывают на различные части этого списка, например:

[0,4,8,12]

У меня есть код: int* end() { return (pointerList.back()); } в моем заголовочном файле и вызов в моем файле .cpp:

int * totry = ca.end ();cout << * totry; </p>


Вот так я объявляю свой список указателей

    class ptrList
    {
    public:
        std::list<value_type> listOfValues;
        std::list<*int> pointerlist;

Я заполняю свой список указателей внутри функции "add" и делаю это так:

int lstsqrt = 4;
for (int a = 1; a < lstsqrt; a++)
{
   int endptr = a + (int)lstsqrt;
    pointerlist.push_back((&*listOfValues.begin() + endptr)); //( (lstsqrt - 1) + a)  );

}

И это мой метод end ()

int* end() {return (pointerlist.back());}

И затем он передается моей переменной toTry.

1 Ответ

6 голосов
/ 11 февраля 2012

Одной из проблем может быть эта строка:

pointerlist.push_back((&*listOfValues.begin() + endptr));

Ваш listOfValues является std::list, и поэтому его значения не сохраняются в непрерывном блоке памяти.Таким образом, вы получаете итератор для первого элемента с listOfValues.begin(), разыменовываете итератор с *, берете адрес этого с &, чтобы получить int*, затем добавляете некоторое значение, которое указывает куда-то в памятьчто вы не знаете, что это такое.

Попробуйте сделать это вместо этого:

pointerlist.push_back((&*(listOfValues.begin() + endptr)));

, где вы добавляете endptr к итератору (чтобы продвинуть его впередсписок), тогда разыщите и возьмите адрес.На самом деле вам может понадобиться использовать advance вместо +.

...