-2
int a=0;
while (a<2)
{
    //infos.stops is point to one array, called abc[10]

    output = output + QString::fromStdString(*infos.stops)+ "." ;

    infos.stops++;
    a++;
}
ui->showMsg->setText(output);

问题是 infos.stops 确实显示了,但是一些有趣的字符看起来像:

在此处输入图像描述

我已经上传了我在 QT Designer 中设计的所有源代码 http://uploading.com/files/eaddfaf8/bus.zip/ 问题行在 manager.cpp 第 133 行。

4

3 回答 3

3

尝试使用 output = output + QString::fromStdString(*(infos.stops))+ "." ;

于 2011-01-30T15:57:00.777 回答
1

我想我在对您的应用程序进行了一些测试后解决了它。以下代码段应该这样做:

          output = output+ "Stops travelled: ";
          for(int a = 0; a < infos._numstops; ++a)
          {
              if(a)
                  output += ", ";
              output = output + QString::fromStdString(infos.stops[a]);
          }
          output = output + "<br>";

请注意,您有可用的成员infos._numstops并且应该使用它。if(a)如果你想输出一个逗号分隔的列表,这是一个很好的技巧。

(我运行了您的应用程序,并注意到该info结构不包括您开始路径的停止点,而是结束点。您应该在输出中包含起始停止点或排除目标停止点。进一步注意,+=运算符喜欢在 if-body 中是附加字符串的常用方法。)

于 2011-02-01T18:52:50.073 回答
0

在 manager.cpp:103 中,您调用的是 DE1.cost(X,Y)。此方法在堆栈 (datzz.cpp:432) 和 datzz.cpp:502 上创建一个 std::string 数组(通过)

c.stops = passed;

它将指向分配在堆栈上的内存块的指针存储在 DatzEzy::info 实例 c 的 stop 变量中。当方法 cost(string, string) 返回时,分配给传递的内存被释放,你的输出将是垃圾。永远不要存储指向堆栈分配对象的指针。

顺便说一句,在函数调用中传递(只读)字符串时,您应该考虑使用 const 引用,这样可以避免昂贵的复制。

于 2011-02-01T17:16:49.210 回答