关于C语言中定义数组大小的问题(最多能定义多少)

2024-11-28 02:42:08
推荐回答(4个)
回答1:

在MSDN中的array declarations有如下描述:
The type of integer required to hold the maximum size of an array is the size of size_t. Defined in the header file STDDEF.H, size_t is an unsigned int with the range 0x00000000 to 0x7CFFFFFF.

也就是说,只要硬件条件许可的条件下,数组的大小可以为0x7CFFFFFF(2G BYTE)。
数组所占空间为:count*sizeof(TYPE) , count是数组元素的个数,sizeof(TYPE) 是一个元素所占空间字节数。
如果定义数组空间超出2G,VC编译会报错:fatal error C1126: '2G' : automatic allocation exceeds 。。。
因此,当实际编程确实需要使用更大的数组时,则要采用动态定义方式(new malloc等)。

回答2:

动态分配,用虚拟存储。

#include
#define array_size 1000000
void main()
{
unsigned char *a[8];
int i;
for (i=0;i<8;i++){
a[i] = (unsigned char *) malloc(array_size * sizeof(unsigned char));
}
if ( !a[7]) {
printf("No enough memory\n");
exit(1);
}
printf("pass alloc\n");
}

回答3:

查了一下,这个错误是栈溢出。 栈的大小是比较有限的, 不能定义这样大的东西

需要一个大的数组的话应该定义一个指针,然后用malloc分配内存空间给他,这个是在堆上分配的,可以分配很多

回答4:

两个办法
1。定义为全局变量
2. 动态分配 C语言使用malloc C++使用new

原因就是栈是有大小的

当然也可以指定大小 不过就没有可移植性了 而且指定也有范围