今天在写代码时用到了memset这个函数,发现如果定义一个int型数组
a[1000000],
使用memset进行初始化的时候第一种写法程序死机,第二种就能通过:
(1) memset(a, 0, 1000000*sizeof(int))
(2) memset(a, 0, sizeof(a))
请问这是为什么?这两种写法有什么区别?
今天在写代码时用到了memset这个函数,发现如果定义一个int型数组
a[1000000],
使用memset进行初始化的时候第一种写法程序死机,第二种就能通过:
(1) memset(a, 0, 1000000*sizeof(int))
(2) memset(a, 0, sizeof(a))
请问这是为什么?这两种写法有什么区别?
a[1000000]; //如果是vc,此行就会报错
在栈上申请1000000个整型,需要申请内存4000000字节,合3.81M
vc默认栈大小为1M,所以内存是不够的,申请不到那么多内存,所以在a[1000000];就会报错。
如果是linux,栈大小默认为8M,就可以申请那么多的整型。
对于memset的这两行是没有区别的,两行的效果是一样。