■81973 / inTopicNo.1) |
visual stdio ウォッチ画面でchar型の値にゴミ |
□投稿者/ MAC (6回)-(2016/11/25(Fri) 23:33:16)
|
分類:[C/C++]
Visual Stdio 2015を使用しています。
C++, Cはある程度の経験があります。
visual stdio はまだ使用し始めて数か月程度です。
もしどなたか理由がわかる方がいらっしゃいましたら教えてください。
以下のようなC++のコードを実行し、
tmp classのメンバをデバッガのウォッチ画面で閲覧すると、
char や unsigned char のメンバの値にゴミが表示されます。
これはなぜ発生するのでしょうか?
C++の環境であればchar型は普通に扱えるとの理解をしているので、
なぜこのような挙動になるかが不思議に思っています。
デバッガの設定方法の問題であるのか、コードがマズイのか、
Visual Stdio の仕様なのか、もしご存じの方がいらっしゃいましたら
ご教授くださいませ。
例:
clock_class 1 '\x1' unsigned char
priority2 248 '・' unsigned char
log_sync_interval -3 '' char
log_announce_interval 0 '\0' char
(スクリーンキャプチャ)
http://www.mediafire.com/view/z3m9hn8kb5i63gm/visual_stdio_watch1.png
補足:
- C++/CLI の環境で、参照型(public ref struct test_class)で記述してもも発生しました。
C#では、8bitの型がないようなので、試していません。)
-------------------------------------------------------
コード:
#include "stdafx.h"
#include "stdint.h"
struct test_class{
public:
uint16_t descriptor_index;
uint16_t localized_description;
uint64_t mac_address;
uint16_t interface_flags;
uint64_t clock_identity;
uint8_t priority1;
uint8_t clock_class;
uint16_t offset_scaled_log_variance;
uint8_t clock_accuracy;
uint8_t priority2;
uint8_t domain_number;
int8_t log_sync_interval;
int8_t log_announce_interval;
int8_t log_pdelay_interval;
uint16_t port_number;
};
int main()
{
test_class * tmp = new test_class;
tmp->descriptor_index = 0;
tmp->localized_description = 65535;
tmp->mac_address = 0x22970405b7;
tmp->interface_flags = 0x7;
tmp->clock_identity = 0x2297fffe0405b7;
tmp->priority1 = 0;
tmp->clock_class = 1;
tmp->offset_scaled_log_variance = 17258;
tmp->clock_accuracy = 32;
tmp->priority2 = 248;
tmp->domain_number = 0;
tmp->log_sync_interval = -3;
tmp->log_announce_interval = 0;
tmp->log_pdelay_interval = 0;
tmp->port_number = 1;
<- ここでデバッガでブレイク
delete tmp;
return 0;
}
-------------------------------------------------------
|
|