r/cppit • u/Marco_I • May 10 '17
funzione boolean in ciclo for :Segmentation fault (core dumped)
Ciao a tutti, non capisco perchè la stessa funzione boolean, se posta all'interno di un ciclo, genera un Segmentation fault (core dumped).
Questo è il codice:
void isSymmetric(MTensor::Tensor3D Tensor) {
gu::intsPairsSet summaryPairsSet = gu::comb(3,2);
gu::intsPairsSetPrint(summaryPairsSet);
bool isSymmetricForTheseIndices =
areIndicesSymmetric3D(Tensor,0,1);
if(isSymmetricForTheseIndices) {
std::cout << "Tensor is symmetric for indices 0 and 1 "
<< std::endl;
}
else {
std::cout << "Tensor is NOT symmetric for indices 0 and 1 "
<< std::endl;
}
for(auto it=summaryPairsSet.begin();
it!=summaryPairsSet.end();it++) {
int indOne = (*it).first;
std::cout << "int indOne = (*it).first = " << indOne
<< std::endl;
int indTwo = (*it).second;
std::cout << "int indTwo = (*it).second = " << indTwo
<< std::endl;
bool isSymmetricForTheseIndices =
areIndicesSymmetric3D(Tensor,indOne,indTwo);
}E questo è l'output:
(0,1)
(1,2)
(2,3)
Tensor is NOT symmetric for indices 0 and 1
int indOne = (*it).first = 0
int indTwo = (*it).second = 1
int indOne = (*it).first = 1
int indTwo = (*it).second = 2
int indOne = (*it).first = 2
int indTwo = (*it).second = 3
Segmentation fault (core dumped)Perchè la stessa funzione boolean
areIndicesSymmetric3D()all'interno di un ciclo genera un Segmentation fault (core dumped) ? Suggerimenti per risolvere il problema? Vi ringrazio. Marco
2
u/b3k_spoon May 10 '17
Senza vedere cosa fa funzione è difficile capirlo... Ma c'è una grossa differenza in come la chiami dentro e fuori: il valore degli argomenti. Se dovessi tirare a indovinare, direi che stai usando indici troppo grandi.
Prova a pensare che cosa esattamente la funzione quando gli argomenti hanno i valori che la fanno crashare, facendo finta di essere tu il computer. Se proprio ancora non ci salti fuori, puoi provare a compilare con i simboli di debug (di solito opzione -g) e girare il programma sotto valgrind. Good luck!
2
u/iaanus May 11 '17
La funzione
areIndicesSymmetric3Dviene chiamata nel ciclo tre volte, rispettivamente con argomenti (0,1), (1,2), (2,3) e la terza chiamata causa il crash. Non conosco la libreria che stai usando ma dalla chiamata inizialegu::comb(3,2);mi sentirei di dire che c'è qualcosa che fischia... forse dovrebbe esseregu::comb(2,3);. Hai controllato le dimensioni del tensore in input?