压力测试有一个很奇怪的问题。这个问题不能100%复制,所以我使用了以下代码并成功地复制了它:
269 >---String16 test1 = String16("0");
270 >---String16 test2 = String16("0");
271 >---String16 test3 = String16("1");
272 >---String16 test4 = String16("1");
273 >---String16 test5 = String16("12");
274 >---String8 test6 = String8("12");
275 >---const char* s1 = String8(test1).string();
276 >---PLOGI("s1: %s", s1);
277 >---const char* s2 = String8(test2);
278 >---PLOGI("s2: %s", s2);
279 >---const char* s3 = String8(test3).string();
280 >---PLOGI("s3: %s", s3);
281 >---const char* s4 = String8(test4);
282 >---PLOGI("s4: %s", s4);
283 >---const char* s5 = String8(test5);
284 >---PLOGI("s5: %s", s5);
285 >---const char* s6 = test6;
286 >---PLOGI("s6: %s", s6);大多数日志输出都与预期的一样:
2432 I/PHService( 127): s1: 0
2433 I/PHService( 127): s2: 0
2434 I/PHService( 127): s3: 1
2435 I/PHService( 127): s4: 1
2436 I/PHService( 127): s5: 12
2437 I/PHService( 127): s6: 12但很少有人会说:
2458 I/PHService( 127): s1: ^X
2459 I/PHService( 127): s2: ^X
2460 I/PHService( 127): s3: ^X
2461 I/PHService( 127): s4: ^X
2462 I/PHService( 127): s5: ^X
2463 I/PHService( 127): s6: 12似乎转换后的数据已经损坏(^X是损坏的数据),但它只发生在String8(Strng16),而不是String8()。我不知道这是怎么回事。我用了接线员
String8::operator const char*() const这对于String8(Strng16)来说也是可行的。
发布于 2014-03-20 09:29:58
在s1、s2、. s5的初始化器中,可以创建String8类型的临时对象。它们中的每一个都是短暂的,并在整个表达式的评估结束时被销毁,在整个表达式被创建的地方。
因此,当您检查所指向的数据的下一行时,指针可能指向一些已经释放的内存--而且可能是重用的。
String8()很可能是通过将字符串指针设置为静态空字符串缓冲区来实现的,因此没有需要释放的内存。
发布于 2017-08-10 15:32:33
可以使用LOGE或printf。
printf("I print a string16 '%s' ", String8(str).string());https://stackoverflow.com/questions/22527711
复制相似问题