相关疑难解决方法(0)

大数组大小的分段错误

以下代码在2Gb机器上运行时给出了分段错误,但在4GB机器上运行.

int main()
{
   int c[1000000];
   cout << "done\n";
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

阵列的大小只有4Mb.可以在c ++中使用的数组大小是否有限制?

c++ arrays segmentation-fault

103
推荐指数
3
解决办法
9万
查看次数

声明大型数组时出现堆栈溢出异常

以下代码为我生成堆栈溢出错误

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还具有优于堆栈分配的优势,允许我使用变量声明大小.

c memory arrays stack allocation

39
推荐指数
2
解决办法
1万
查看次数

C中的malloc,但使用多维数组语法

有没有什么方法可以对大型数组进行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 arrays malloc pointers multidimensional-array

13
推荐指数
3
解决办法
9085
查看次数

用C++创建一个大数组

可能重复:
大型阵列上的分段错误

大家好

我正在尝试使用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)

一切都好.

所以,如果我想创建一个像上面这样的大数组,我该怎么办?

最好的祝福,

c++

10
推荐指数
3
解决办法
4万
查看次数

C编程,为什么这个大型数组声明会产生分段错误?

此代码在数组声明期间产生分段错误.我很困惑为什么会这样.我故意选择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 arrays integer

5
推荐指数
1
解决办法
5380
查看次数

尝试声明一个大数组时,分段错误和核心转储

在我的C程序中,当我尝试分配此数组值时:

double sample[200000][2];
Run Code Online (Sandbox Code Playgroud)

我收到了分段错误错误.但是当我使用时:

double sample[20000][2]
Run Code Online (Sandbox Code Playgroud)

有用!!这些指数值是否有限制?

c arrays

5
推荐指数
2
解决办法
3547
查看次数

在 C 中创建大型数组时出现分段错误

你们在这段代码上给了我很大帮助。首先我要说的是,我不太了解 C,但我正在努力做到这一点。

这是程序应该做的事情:

  1. 创建长度为 1000 万的随机数列表
  2. 使用 shell 排序函数对随机数列表进行排序(仍然无法正常工作...我认为这就是我将指针传递给函数的方式)
  3. 列出一百万长的清单
  4. 记录时间时重复最多 1 亿次(由于某种原因时间显示为 0.0000000)

我只是想测试这个 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)

c arrays sorting segmentation-fault

2
推荐指数
1
解决办法
2737
查看次数

在C中的堆栈上分配一个大数组

我有以下程序:

#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的阵列吗?

c memory arrays

2
推荐指数
1
解决办法
86
查看次数