以下代码在2Gb机器上运行时给出了分段错误,但在4GB机器上运行.
int main()
{
int c[1000000];
cout << "done\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
阵列的大小只有4Mb.可以在c ++中使用的数组大小是否有限制?
以下代码为我生成堆栈溢出错误
int main(int argc, char* argv[])
{
int sieve[2000000];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?我正在使用Turbo C++,但我想将我的代码保存在C中
编辑:
感谢您的建议.上面的代码只是例如,我实际上在函数中声明了数组而不是在sub main中.此外,我需要将数组初始化为零,所以当我使用Google搜索时,我发现calloc非常适合我的目的.
Malloc/calloc还具有优于堆栈分配的优势,允许我使用变量声明大小.
有没有什么方法可以对大型数组进行malloc,但是用2D语法引用它?我想要的东西:
int *memory = (int *)malloc(sizeof(int)*400*200);
int MAGICVAR = ...;
MAGICVAR[20][10] = 3; //sets the (200*20 + 10)th element
Run Code Online (Sandbox Code Playgroud)
#define INDX(a,b) (a*200+b);
Run Code Online (Sandbox Code Playgroud)
然后参考我的blob:
memory[INDX(a,b)];
Run Code Online (Sandbox Code Playgroud)
我更喜欢:
memory[a][b];
Run Code Online (Sandbox Code Playgroud)
int *MAGICVAR[][200] = memory;
Run Code Online (Sandbox Code Playgroud)
没有这样的语法吗?请注意我不仅使用固定宽度数组的原因是它太大而无法放在堆栈上.
void toldyou(char MAGICVAR[][286][5]) {
//use MAGICVAR
}
//from another function:
char *memory = (char *)malloc(sizeof(char)*1820*286*5);
fool(memory);
Run Code Online (Sandbox Code Playgroud)
我收到警告,passing arg 1 of toldyou from incompatible pointer type但代码有效,我已经确认访问了相同的位置.没有使用其他功能有没有办法做到这一点?
可能重复:
大型阵列上的分段错误
大家好
我正在尝试使用C++在VS 2010中创建一个非常大的数组.
当我尝试创建如下所示的数组时
int dp[4501][4501]
or
int dp[1000][1000]
Run Code Online (Sandbox Code Playgroud)
它引发了异常"Stack Overflow"然后我将其更改为:
int dp[100][100]
Run Code Online (Sandbox Code Playgroud)
一切都好.
所以,如果我想创建一个像上面这样的大数组,我该怎么办?
最好的祝福,
此代码在数组声明期间产生分段错误.我很困惑为什么会这样.我故意选择2000000000作为值,因为它低于2 ^ 31并且可以适合整数变量.
int main()
{
int nums_size = 2000000000;
int nums[nums_size];
int i;
for(i = 0; i < nums_size; i++) {
nums[i] = i;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 在我的C程序中,当我尝试分配此数组值时:
double sample[200000][2];
Run Code Online (Sandbox Code Playgroud)
我收到了分段错误错误.但是当我使用时:
double sample[20000][2]
Run Code Online (Sandbox Code Playgroud)
有用!!这些指数值是否有限制?
你们在这段代码上给了我很大帮助。首先我要说的是,我不太了解 C,但我正在努力做到这一点。
这是程序应该做的事情:
我只是想测试这个 shell 排序程序与标准库中内置的快速排序。
我尝试过使用和不使用指针。注释掉的部分在完成后应该可以工作。它只会让事情变得更加混乱,哈哈
请帮帮我,到目前为止你们都很棒......
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void shellSort(int *A, int n);
void checkSort(int *A, int n);
int main(){
/*Initialize Random Array*/
int unsorted_list[10000000];
int *ptr = &unsorted_list[0];
int random_number;
int i;
srand ( time(NULL) );
for(i=0; i<10000000; i++){
random_number = rand();
unsorted_list[i] = random_number % 10000000;
}
//Do C Shell Sort
double shell_results[10][2];
double clock_diff;
int j=10000000;
clock_t t0, t1;
int …Run Code Online (Sandbox Code Playgroud) 我有以下程序:
#include <stdio.h>
#include <sys/resource.h>
int main()
{
// Anything over ~8MB fails
short int big[4000000];
printf("%lu\n", sizeof(big));
}
Run Code Online (Sandbox Code Playgroud)
ulimit表明我的程序有无限的可用内存。但是,如果我尝试分配更多的内存,则会出现错误:
short int big[6000000];
$ gcc main.c -o main.out && ./main.out
Segmentation fault: 11
Run Code Online (Sandbox Code Playgroud)
我需要在C程序中进行任何更改,以便分配例如1GB的阵列吗?