C语言中的数组最大大小[已关闭]

uqzxnwby  于 2023-05-16  发布在  其他
关注(0)|答案(1)|浏览(263)

**已关闭。**此问题不符合Stack Overflow guidelines。目前不接受答复。

这个问题似乎不是关于在help center定义的范围内编程。
5天前关闭。
Improve this question
我有一个小问题,一开始可能看起来有点傻,但是在C中,我可以分配给动态数组的最大大小是多少?有可能增加这个尺寸吗?
我问这个问题是因为当我想分配一个大小为10000000的随机整数时,我有一个segfault。下面我给予你我的代码,我的代码是正确的!

typedef struct _Array   Array;

struct      _Array
{
    unsigned int        size;
    int         *data;
    int min, max;
};

Array   *random_array(unsigned int size)
{
    Array   *array;

    array = (Array *)malloc(sizeof(Array));
    array->size = size;
    array->data = (int *)malloc(size * sizeof(int));
    if (array->data == NULL)
    {
        fprintf(stderr, "Error: memory allocation failed.\n");
        exit(1);
    }
    srand(time(NULL));
    for (unsigned int i = 0; i < size; i++)
    {
        array->data[i] = rand();
    }
    return (array);
}

我在shell中找到了这个:

merge sort: 0.154297 second(s), 697539 random integers
merge sort: 0.164062 second(s), 777756 random integers
merge sort: 0.185547 second(s), 867197 random integers
merge sort: 0.214844 second(s), 966924 random integers
merge sort: 0.234375 second(s), 1078120 random integers
merge sort: 0.263672 second(s), 1202103 random integers
merge sort: 0.296875 second(s), 1340344 random integers
merge sort: 0.332031 second(s), 1494483 random integers
merge sort: 0.369141 second(s), 1666348 random integers
merge sort: 0.423828 second(s), 1857978 random integers
merge sort: 0.468750 second(s), 2071645 random integers
Segmentation fault (core dumped)
y1aodyip

y1aodyip1#

我不能复制segfault,但我会做一些改变。在评论中提到了其中的大部分:
1.不要使用保留的标识符(_前缀)。
1.不要从malloc()强制转换void *
1.检查所有malloc()的返回值。
1.更喜欢将变量而不是类型传递给sizeof
1.让调用者决定如何处理错误。
1.将srand()移动到main()。这使得打印种子时很容易产生错误。

  1. free(array)如果array->datamalloc()失败,否则它泄漏,现在我们return NULL失败。
  2. free()数组。你可能想写一个有这两个的函数。
    1.首选初始化变量(Array *array = malloc(...);而不是Array *array;)。minmax未初始化。你能吗
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct Array {
    unsigned int size;
    int *data;
    int min;
    int max;
} Array;

Array *random_array(unsigned int size) {
    Array *array = malloc(sizeof *array);
    if(!array) {
        fprintf(stderr, "Error: memory allocation failed.\n");
        return NULL;
    }
    array->size = size;
    array->data = malloc(sizeof *array->data * size);
    if (!array->data) {
        fprintf(stderr, "Error: memory allocation failed.\n");
        free(array);
        return NULL;
    }
    for (unsigned int i = 0; i < size; i++)
        array->data[i] = rand();
    return array;
}

int main(void) {
    srand(time(NULL));
    Array *array = random_array(10000000);
    if(array) free(array->data);
    free(array);
}

相关问题