-5
assocTab::swap()
のオブジェクトのisCaseSensitive
の値を変更できないのはなぜですか? isCaseSensitive
フィールドはassocTab()
コンストラクタ内で初期化されます。 Valgrindの出力:クラスフィールドの値を変更するC++ - '条件付きジャンプまたは移動はユニット化された値に依存します'
==13666== Conditional jump or move depends on uninitialised value(s)
==13666== at 0x401341: assocTab::setCaseSensitivity(bool) (assoctable.cpp:117)
==13666== by 0x401157: assocTab::swap(assocTab&) (assoctable.cpp:68)
==13666== by 0x4011C3: assocTab::operator=(assocTab const&) (assoctable.cpp:77)
==13666== by 0x4015FE: main (main.cpp:21)
==13666==
私の方法および簡体クラスisCaseSensitive
が属する:
class assocTab{
private:
struct node{
node* next;
char* key;
int val;
};
node* head;
bool isCaseSensitive;
void clear();
void swap(assocTab& l);
public:
void setCaseSensitivity(bool);
bool getCaseSensitivity() const;
};
assocTab::assocTab(){
head = NULL;
setCaseSensitivity(true);
}
assocTab::assocTab(const assocTab& l){
node *src, **dst;
head = NULL;
src = l.head;
dst = &head;
try{
while(src){
*dst = new node (*src);
src = src->next;
dst = &((*dst)->next);
}
}catch(...){
clear();
throw;
};
}
void assocTab::swap(assocTab& l){
bool swpCS = getCaseSensitivity();
bool swpCS2 = l.getCaseSensitivity();
l.setCaseSensitivity(swpCS);
setCaseSensitivity(swpCS2); //line 68
std::swap(l.head, head);
}
void assocTab::setCaseSensitivity(bool isCS){
if(isCS) //line 117
isCaseSensitive = true;
else
isCaseSensitive = false;
}
bool assocTab::getCaseSensitivity() const{
return isCaseSensitive;
}
assocTab& assocTab::operator= (const assocTab& l){
if (&l == this)
return *this;
assocTab t(l);
swap(t);
return *this;
}
'assocTab'のコンストラクタで' isCaseSensitive'を初期値に設定すると消えますか?他の人が問題を再現できるようにするには、[最小で完全で検証可能な例](http://stackoverflow.com/help/mcve)を含める必要があります。 –
いいえ、そうではありません。 – Topkek
あなたのvalgrind出力に演算子=()が記述されています。それはあなたが書いたものですか? –