読者です 読者をやめる 読者になる 読者になる

孔明の罠

C/C++で配列を使ってると誰もが悩むところ

#include<stdio.h>
int main() {
  int n[640*480];
  int i=0;
  printf("%d",i);
  return 0;
}

これを実行すると何も表示されない\(^o^)/
int n[640*480];のところでスタックオーバーフローになってi のメモリが確保されてない(´・ω・`)


Javaとかだとjava.lang.OutOfMemoryErrorを出してくれるから気にしてなかったけど
C/C++は何事もなかったように中断するからキツイ

        _,,:-ー''" ̄ ̄ ̄ `ヽ、
     ,r'"           `ヽ.
 __,,::r'7" ::.              ヽ_
 ゙l  |  ::              ゙) 7
  | ヽ`l ::              /ノ )
 .| ヾミ,l _;;-==ェ;、   ,,,,,,,,,,,,,,,_ ヒ-彡|
  〉"l,_l "-ー:ェェヮ;::)  f';;_-ェェ-ニ ゙レr-{   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  | ヽ"::::''   ̄´.::;i,  i `'' ̄    r';' }   | 久々にワロタ
 . ゙N l ::.  ....:;イ;:'  l 、     ,l,フ ノ   | こういう罠が沢山ある
 . |_i"ヽ;:...:::/ ゙'''=-='''´`ヽ.  /i l"  < のが昔のCなんだよな今の新参は昔の
   .| ::゙l  ::´~===' '===''` ,il" .|'".    | Cを知らないから困る
    .{  ::| 、 :: `::=====::" , il   |     \________
   /ト、 :|. ゙l;:        ,i' ,l' ノト、
 / .| \ゝ、゙l;:      ,,/;;,ノ;r'" :| \
'"   |   `''-、`'ー--─'";;-'''"   ,|   \_ 

サーセンwwwwwwww


これを解決するにはCならmallocあたりを使えばおk

#include<stdio.h>
#include <stdlib.h>
int main() {
  int* n = (int*)malloc(10000000000000000000000000000);
   int i =0; 

  printf("%d",i);
  free(n);
  return 0;
}
//実行結果
//0


でもJavaみたいにガーベジコレクションはないからfreeを忘れるとメモリリークが起こるYO!!
(C++ならnew〜delete)