Dans mon programme C, en fonction de l'entrée de l'utilisateur, la mémoire sera allouée pour une simulation donnée. Le problème initial auquel je suis confronté est que l'utilisateur peut demander un grand nombre à allouer, mais malloc() n'échoue jamais jusqu'à ce qu'il manque de mémoire, puis le programme se bloque. J'ai étudié la logique derrière cela et il me semble logique, voir [1] []. Une solution de contournement possible donnée ici "SIGKILL while allocating memory in C++" suggère de définir overcommit_memory
dans /proc/sys/vm/overcommit_memory
de 0 à 2.Comment vérifier si malloc() excède la mémoire
Cela a résolu le problème d'un côté. Mais puisque j'utilise -fsanitize=address
j'obtiens l'erreur du désinfectant.
Y a-t-il une meilleure solution à cela?
Si l'utilisateur donne la valeur 'X' comme entrée, vous savez * * combien d'octets qui se traduira par votre allocation de programme. Vous pouvez facilement limiter la valeur de 'X' à quelque chose qui n'épuise pas le système. Donc, si l'utilisateur entre une valeur trop grande, dites simplement à l'utilisateur qu'il est trop grand et demandez de nouveau la valeur. –
En outre, vous * savez * que ['malloc'] (http://en.cppreference.com/w/c/memory/malloc) renvoie' NULL' s'il ne parvient pas à allouer de la mémoire? Vous pouvez également facilement vérifier cela et ne pas tenter de déréférencer le pointeur nul. –
Veuillez fournir un exemple minimal, complet et vérifiable (http://stackoverflow.com/help/mcve) – stenliis