2010-10-22 29 views
3

Juste curieux, Y a-t-il ou y a-t-il déjà quelqu'un qui ait rencontré un dépassement de tas/buffer exception en C#?Exception de dépassement de tas/tampon

+0

J'aurais pensé que ces types d'erreurs se produiraient en utilisant 'COM Interop' plutôt que le développement pur .NET? Quelqu'un sait-il si j'ai raison de penser cela? Parlez-vous du «tas géré» dans .NET? –

+0

Est-ce vraiment une question "juste curieuse"? Dans ce cas, je vote pour le fermer. Il y a beaucoup de questions que chacun de nous est «juste curieux», mais elles ne sont pas toutes dignes de réponses. D'un autre côté, si vous avez réellement rencontré une telle exception et que vous avez besoin d'y faire face, nous pouvons parler. – abelenky

+0

Je cherche pure .NET. J'ai provoqué des débordements de tampon en utilisant C++ à dessein (il ya longtemps que je ne sais pas si cela est applicable aujourd'hui). – Viv

Répondre

8

Vous pouvez provoquer un dépassement de tampon en C# dans un code dangereux. Par exemple:

public unsafe struct testo 
{ 
    public int before; 
    public fixed int items[16]; 
    public int after; 
} 

testo x = new testo(); 
x.after = 1; 
for (int i = 0; i <= 16; ++i) 
{ 
    unsafe 
    { 
     x.items[i] = 99; 
    } 
} 
Console.WriteLine(x.after); 

Ce qui précède imprimera "99" car il a débordé le tampon.

En l'absence de code non sécurisé, je ne connais aucun moyen de provoquer un dépassement de mémoire tampon qui ne déclenche pas d'exception.

0

Selon ce que vous entendez par débordement de la mémoire tampon, une exception IndexOutOfRangeException est une exception provoquée par un dépassement de capacité. Vous pouvez l'obtenir assez facilement en accédant à un index de tableau au-delà de sa taille d'allocation. De même faire assez de récursivité et vous pouvez obtenir StackOverflowException. Je ne suis pas sûr de ce que vous cherchez, alors vous pourriez vouloir clarifier.