Folie: faire la même chose encore et encore et attendre des résultats différents.
Écrivez un programme qui lève juste une exception (erreur d'exécution) à chaque exécution. Le défi étant d'avoir la probabilité de produire plus d'un crash, sans appeler directement les exceptions (pas d' throw
instructions) et de ne pas utiliser de fonctions de comptage de ticks aléatoires ou CPU intégrées.
- 10 points pour chaque erreur possible.
- 25 points bonus si l'erreur / crash se produit sur un autre processus ou le système.
Règles
- Les réponses doivent indiquer quelles erreurs sont possibles et comment elles sont générées.
- Impossible d'utiliser le générateur de nombres aléatoires système (intégré) à moins qu'il ne soit associé au même numéro à chaque exécution du programme.
- Impossible d'utiliser le nombre de cycles de tics ou de processeurs, sauf s'ils sont comptés par rapport au début du thread principal du programme.
- Le multithreading est autorisé (s'il n'est pas encouragé).
Modifier 1
La génération de GUID relève du générateur de nombres aléatoires intégré. La génération de GUID "maison" personnalisée est autorisée.
L'accès au système de fichiers est autorisé pour les E / S de fichiers, sauf lorsque cela est fait pour contourner les règles (lire un fichier de bits aléatoires ou horodatage).
Modifier 2
- Appeler
abort()
ouassert()
viole l'esprit du défi de faire des logiciels insensés et donc pas 10 points seront attribués pour ce mode d'échec.
Bonne chance!
code-challenge
ja72
la source
la source
Réponses:
Java, 400
Java est béni (?) Avec de nombreux
Exception
s etError
s. De nombreuxException
s sont spécifiques au fonctionnement d'une seule classe. À titre d’exemple de l’un des cas les plus extrêmes, il existe plus de 10Exception
s (tous sont des sous-classes deIllegalFormatException
)Formatter
classe seule, et j'ai pris le temps de faire le code jette (presque) tous.Ma réponse actuelle comporte 40
Exception
s /Error
s différents, et ils sont exécutés au hasard en fonction du module deSystem.nanoTime()
avec un entier.La méthode ci-dessus doit être autorisée, car elle tombe dans le cas «3. Impossible d'utiliser le nombre de cycles de tics ou de CPU, à moins qu'ils ne soient comptés par rapport au début du thread principal du programme» .
Instruction de compilation
JRE / JDK ou OpenJDK d'Oracle est fortement recommandé pour exécuter le code. Sinon, certaines exceptions peuvent ne pas être levées, car certaines d'entre elles reposent sur les détails internes de l'implémentation de référence et je n'ai pas de solution de secours fiable.
Le code ci-dessous se compile avec succès
javac 1.7.0_11
et produit toutes les exceptionsjava 1.7.0_51
.Pour exécuter ce code, vous devez copier et coller le code ci-dessous dans un éditeur compatible Unicode (par exemple Notepad ++), l'enregistrer en UTF-16 (Big-Endian ou Little-Endian n'a pas d'importance tant que la nomenclature est écrite) .
Changez le répertoire de travail (
cd
) à l'endroit où le code source est enregistré ( c'est important ).Compilez le code avec la commande suivante:
Et exécutez le code:
Il n'y a rien de destructeur dans mon code, car je veux aussi le tester sur mon ordinateur. Le code le plus "dangereux" est la suppression du
ToBeRemoved.class
fichier dans le dossier actuel. En dehors de cela, le reste ne touche pas le système de fichiers ou le réseau.Liste des exceptions et erreurs
Dans l'ordre comme déclaré dans l'instruction switch-case. Il y a 37
Exception
s et 3Error
s au total.Pattern
, avec un cas ennuyeux comme sauvegarde)Pattern
, avec casse ennuyeuse comme sauvegarde)Pattern
, avec un cas ennuyeux comme sauvegarde)Pattern
, avec un cas ennuyeux comme sauvegarde)$
dansPattern
peut correspondre avant le terminateur de ligne finale)Matcher
sans effectuer de correspondance)split(String regex)
)Exception
lors de l'initialisation d'une classe)java.nio.*
SpécifiquesException
)java.nio.*
-specificException
)java.nio.*
-specificException
)java.util.Stack
SpécifiquesException
)Charset.isSupported(String name)
retourne false ou jetteException
)java.util.Scanner
SpécifiquesException
)java.util.Formatter
spécifiquesException
)SecurityManager
est utilisable)Class
classe)Exception
ne peut pas être levé dans l'implémentation d'Oracle, pas de sauvegarde)la source
nanoTime
et le travail effectué avec cette réponse.Java
est-1 % 40 == -1
ou-1 % 40 = 39
?-1
. Avez-vous obtenu un nombre négatif? (Modifié pour s'assurer que tout n'est pas négatif).C (Windows 7) - 80 + 25 = 105 points
Le programme suivant s'appuie sur ASLR
L'exception suivante se produirait au hasard
Vector Subscript Out of Range
)Infinite Recursion
Dividing by Zero
Allocating Huge Memory
By Accessing NULL
By overwriting stack
la source
<iostream>
nécessaire?assert()
équivaut à lever une exception.abort
etassert
._crtMessageBoxW
et fait semblant d'appelerraise(SIGABRT)
, qui se termine viaexit(3)
Perl
Ci-dessous est un extrait de Perl qui meurt avec un nombre illimité de messages de compilation de Perl. Il utilise un générateur de nombres pseudo-aléatoires homebrewed pour générer des caractères ASCII imprimables, puis essaie de les exécuter en perl. Je ne connais pas le nombre exact d'avertissements de temps de compilation que perl peut donner, mais il y a certainement au moins 30 erreurs de ce type, et elles peuvent se présenter sous différentes combinaisons. Donc, à moins qu'il ne soit jugé invalide, je dirais que ce code obtient un ordre de grandeur de plus de points que les autres solutions =)
Exemple de sortie de deux séries différentes (entrecoupées de nouvelles lignes):
la source
C # (85) (sans abandon ni assertion)
Cette solution utilise l'ID de processus actuel pour déterminer comment planter.
Le processus peut se terminer en raison de:
10x6 + 25 = 85
Éditer
Après que l'OP a interdit Assert et Abort, je les ai supprimés de ma solution, il est donc réduit à 85 avec toutes les méthodes autorisées valides.
la source
Abort()
etAssert()
. Vérifiez si vous pouvez toujours lever ces exceptions sans les invoquer directement.Process.GetCurrentProcess().Id / 4 % actions.Count
?Je ne sais pas si cela est admissible ...
C
Les deux
i
éléments etp
sont pas initialisés, ce qui peut donc entraîner:i
<0i
arrive à 0c
, après des incréments répétés, devient supérieure ài
De plus, cela peut ou non tuer une application existante (selon la valeur de
p[c]
) avec un SIGSEGV.Notez que je n'ai pas testé cela ... veuillez donc commenter si cela ne fonctionne pas
la source
Pétillant .
Avertissement: similaire à la merveilleuse solution d'Abhijit, mais:
la principale source de folie est que le code managé obtient un détail d'implémentation native grâce à un tas de hacks laids;
celui-ci ne nécessite pas ASLR, juste une allocation dynamique de mémoire.
Ce que cela fait:
le programme appelle son propre interpréteur (
spn
commande) et renvoie la description d'un tableau vide dans un fichier. Le tableau est alloué dynamiquement et la description inclut son adresse mémoire.Le programme ouvre ensuite le fichier, analyse la description et obtient l'adresse sous forme d'entier. Il effectue ensuite une sorte de hachage sur la valeur résultante et exécute l'une des actions erronées suivantes:
..
et l'ajout de chaînes est une exception à l'exécution)nil
conformes à la spécification du langage (cela a à voir avec un détail d'implémentation - il est impossible de le distinguer d'un global inexistant). Lorsqu'un tel symbole est rencontré, une erreur d'exécution est levée.la source
Code Python - Bashing Computer with a Bat (au figuré)
Je suis trop paresseux pour finir ça, mais quelqu'un, s'il te plait prends mon idée et cours avec! Le but ici est de supprimer un composant important de votre ordinateur et d'exploiter les exceptions pour cette partie jusqu'à ce que vous finissiez par rmer tout / etc ou / usr / bin ou quelque chose d'important comme ça et regarder le tout se planter et graver. Je suis sûr que vous pouvez marquer beaucoup de "25 points" lorsque tout se bloque. :)
Je l'ai ciblé sur les machines Linux. Bien sûr, cela doit être exécuté en tant que root pour un maximum de dégâts et si vous l'exécutez à plusieurs reprises, cela laissera votre système totalement brique!
Des exceptions:
bat.py:
la source
TI-BASIC, 130
Pour votre calculatrice TI-84
Erreurs fatales (dans l'ordre):
la source
Code PHP: 38 (+2) caractères, 5 erreurs, inaccessible
Liste des erreurs possibles:
Erreur fatale: le temps d'exécution maximal de 'n' secondes dépassé sur la ligne 1
for(;;)
représente une boucle infinieErreur fatale: la taille de la mémoire autorisée de 2097152 octets est épuisée (a tenté d'allouer 884737 octets) sur la ligne 1
PHP a un
php.ini
fichier, et il y a une ligne disantmemory_limit=
et voici l'utilisation maximale du RAM en octets.La partie où l'on dit
$e.=$e++
signifie que$e
sera le résultat de la concaténation de soi augmentée de 1 à chaque itération.Erreur fatale: le nom de la classe doit être un objet valide ou une chaîne sur la ligne 1 Les
classes en PHP peuvent être appelées soit par le nom de la classe, soit en stockant le nom de la classe sous forme de chaîne dans un var ou en affectant une nouvelle instance de la classe et en l'appelant .
Exemple:
$b='PDO';$a=new $b();$a::connect();$b::connect()
-> c'est un code PHP valide.Cette erreur se produit car se
$e
trouvenull
dans la première itération de lafor(;;)
boucle.Erreur fatale: Nom de la fonction doit être une chaîne sur la ligne 1
Comme les classes, mais les fonctions doivent être une chaîne (et
$e
estnull
) ou le nom de la fonction directement ( par exemple:a()
)Erreur fatale: impossible de créer des références aux éléments d'une expression de tableau temporaire sur la ligne 1
PHP a la
foreach
boucle qui boucle à travers chaque élément d'un tableau. Leas
mot-clé est utilisé pour indiquer le nom de la nouvelle variable utilisée pour stocker une copie de la valeur de l'index de tableau courant.Lors de l'utilisation
foreach($array as &$v)
, PHP crée une référence lorsqu'il a&
avant le nom de la variable.C'est un score faible (5 erreurs et est inaccessible) = 50 points
PHP ne permet pas de détecter les erreurs fatales.
Sous linux, l'ajout
shutdown -P +0
entre les backticks exécutera cette commande (dans ce cas, entraînera l'arrêt brutal du système).Cela provoque l'arrêt de tous les processus.
Je ne sais pas si cela est valable pour le bonus ou non.
la source
Dans Actionscript
Les fonctions sont appelées dans une boucle sans fin provoquant le crash de l'interpréteur.
la source
insane
programme.