一组LPWSTR指针,不能正常工作

时间:2010-04-05 04:55:56

标签: c++ arrays pointers

宣告:

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

然后我设置使​​用:

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

现在我知道totalText是正确的,因为如果我使用totalText的SetWindowText它工作正常。我也需要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; 
  }

在需要时分配更多内存。

我的问题是线路没有获得正确的数据。它第一次工作,然后它被破坏了。我一开始以为我会覆盖,但是TotalLines正在增加。希望这是足够的信息。

3 个答案:

答案 0 :(得分:4)

LPWSTR已经a pointer,所以你要创建一个2D指针数组 - 这就是你想要的吗?我想不是,因为这个:

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

LPWSTR*投射到LPWSTR。你的编译器不是在抱怨吗?

答案 1 :(得分:0)

这两个陈述:

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

调用未定义的行为。问题是数组totalLines长的最大索引是totalLines-1

如果您发布了您想要完成的内容,我们可以提供更好的帮助。例如,使用std::vector<std::vector<wchar_t> >std::vector<std::basic_string<wchar_t> >而不是明确分配的LPWSTR数组,似乎可以更好地解决此问题。

答案 2 :(得分:0)

感谢Ben和Eli我得到了答案。它应该是LPWSTR * lines = new LPWSTR [size];因为LPWSTR已经是一个指针。多谢你们。