Массив указателей LPWSTR, не работает правильно - PullRequest
0 голосов
/ 05 апреля 2010

Declare:

LPWSTR** lines= new LPWSTR*[totalLines];

тогда я установил, используя:

lines[totalLines]=&totalText;
SetWindowText(totalChat,(LPWSTR)lines[totalLines]);
totalLines++;

Теперь я знаю, что totalText прав, потому что, если я SetWindowText, используя totalText, он работает нормально. Мне тоже нужен текст в totalLines.

Я тоже делаю:

//accolating more memory.

  int orgSize=size;
  LPWSTR** tempArray;
  if (totalLines == size) { 
   size *= 2; 
   tempArray = new LPWSTR*[size]; 
   memcpy(tempArray, lines,sizeof(LPWSTR)*orgSize); 
   delete [] lines; 
    lines = tempArray; 
  }

чтобы выделить больше памяти при необходимости.

Моя проблема в том, что линии не получают правильные данные. Он работает в первый раз, потом он испортился. Сначала я думал, что перезаписываю, но общее количество увеличилось. Надеюсь, этого достаточно информации.

Ответы [ 3 ]

4 голосов
/ 05 апреля 2010

LPWSTR уже указатель , так что вы создаете двумерный массив указателей - это то, что вы хотели? Я думаю, что нет, потому что это:

SetWindowText(totalChat,(LPWSTR)lines[totalLines]);

Приведение LPWSTR* к LPWSTR. Ваш компилятор не жалуется?

0 голосов
/ 05 апреля 2010

Благодаря Бену и Эли у меня есть мой ответ. Это должно быть LPWSTR * lines = new LPWSTR [size]; поскольку LPWSTR уже является указателем. Спасибо, парни.

0 голосов
/ 05 апреля 2010

Эти два утверждения:

LPWSTR** lines= new LPWSTR*[totalLines];
lines[totalLines]=&totalText;

вызвать неопределенное поведение. Проблема в том, что максимальный индекс массива totalLines long равен totalLines-1.

Если вы опубликуете, что именно пытались достичь, мы могли бы помочь вам лучше. Например, кажется, что эту проблему можно решить гораздо лучше с std::vector<std::vector<wchar_t> > или std::vector<std::basic_string<wchar_t> >, а не с явно выделенным массивом LPWSTR s.

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