Deuxième poste ici et celui-ci m'a vraiment gratté la tête. J'ai une fonction qui traite un tableau pour essayer de trouver des données similaires. Le tableau contient 1410 éléments que je considère être beaucoup mais rien que Node ou mon ordinateur ne devrait pas être capable de gérer.Node.js - Segfault: 11 Avec Quite Large Array
Mon code donne l'erreur "Segmentation Fault: 11" que j'ai trouvé concernait avec les problèmes d'accès à la mémoire, je veux même tester la mémoire de mon Mac mais tout va bien. Le segfault rend très difficile le débogage, c'est pourquoi je suis venu ici.
Le code où quelque chose va mal est à l'intérieur ici:
return matchings.map(matchArray => {
const namesList = matchArray
.map(matchItem => matchItem.name)
.sort((a, b) => a.localeCompare(b))
const symbolsList = matchArray
.map(matchItem => matchItem.symbol)
.sort((a, b) => a.localeCompare(b))
return {
name: common.getMode(namesList),
symbol: common.getMode(symbolsList),
matches: matchArray
}
}).sort((a, b) => a.name.localeCompare(b.name))
Où matchings
est le tableau dont je parle. common.getMode(array)
a ce code:
array.sort()
const stats = {
top: {
name: '',
freq: 0
},
current: {
name: array[0],
freq: 1
}
}
for (let idxName = 1; idxName < array.length; idxName++) {
const currentName = array[idxName]
const lastName = array[idxName - 1]
if (currentName === lastName) {
stats.current.freq++
} else {
if (stats.current.freq > stats.top.freq) {
stats.top.name = stats.current.name
stats.top.freq = stats.current.freq
}
stats.current = {
name: currentName,
freq: 1
}
}
}
if (stats.current.freq > stats.top.freq) {
stats.top.name = stats.current.name
stats.top.freq = stats.current.freq
}
return stats.top.name
Il convient de mentionner que lorsqu'elle est effectuée avec un tableau de taille plus petite ~ 1000, le code fonctionne très bien qui me porte à croire qu'il est mon code. Il y a aussi très peu de contenu en ligne sur Node's Segfault 11 qui n'aide pas.
Toutes les idées grandement appréciées!
Merci pour votre réponse. Le JSON du tableau qui ne fonctionne pas est ici: [link] (https://pastebin.com/SnVJM7xN) et celui qui fonctionne est ici: [link] (https://pastebin.com/GUYMMs6S). Est-il possible que cela soit dû à un délai d'attente en attente d'une promesse, car la fonction prend environ 8 secondes avant que le segfault ne se produise? –