【问题标题】:An array of LPWSTR pointers, not working rightLPWSTR 指针数组,无法正常工作
【发布时间】:2010-04-05 04:55:56
【问题描述】:

声明:

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; 
  }

在需要时分配更多内存。

我的问题是这些行没有得到正确的数据。它第一次工作,然后它被破坏了。起初我以为我在覆盖,但 totalLines 增加了。希望这是足够的信息。

【问题讨论】:

  • 有什么理由不使用矢量?您可以通过&vec[0]获取缓冲区。

标签: c++ arrays pointers


【解决方案1】:

LPWSTR 已经是a pointer,所以您正在创建一个二维指针数组 - 这就是您想要的吗?我认为不是,因为:

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

LPWSTR* 转换为LPWSTR。你的编译器没有抱怨吗?

【讨论】:

  • 编译器可能在抱怨,而演员表可能是一种错误的试图关闭它的尝试。唉。
  • 我希望能够容纳的文本行。比如lines[0]="Hello"lines[1]="Welcome"lines[2]="Test"等。我想做的是创建一个简单的聊天程序,我想将文本保存在这样的数组中,这样我就可以简单地编写一个滚动条。抱歉,我应该在问题中提到这一点。
  • 唉-你说得对,但我什至不想像那样使用 SetWindowText。我这样做只是为了帮助解释这个问题。
  • Eli 是对的,你只需要一个 LPWSTR*,而不是一个指向 LPWSTR 的指针。
  • 什么,我可以发誓我先试过了。 Grrr,是的,它现在工作正常。非常感谢你们。
【解决方案2】:

这两条语句:

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

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

如果您发布您想要完成的具体内容,我们可能会提供更好的帮助。例如,使用std::vector<std::vector<wchar_t> >std::vector<std::basic_string<wchar_t> > 而不是显式分配的LPWSTRs 数组似乎可以更好地解决这个问题。

【讨论】:

  • LPWSTR** 行=新 LPWSTR*[totalLines];已更改为 LPWSTR** lines= new LPWSTR*[size];抱歉,我在发布此问题之前更改了此设置,但忘记更新问题。
  • @BigBirdy:没问题 :) 我希望你能找到一个可以接受的解决方案。
  • 您可以只使用std::wstring,这样您就不需要将模板参数指定给basic_string
  • @GMan:是的。我只是懒惰:)
【解决方案3】:

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

【讨论】:

  • 你为什么不用std::vector? :( 兔子很伤心。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多