**已关闭。**此问题不符合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)
1条答案
按热度按时间y1aodyip1#
我不能复制segfault,但我会做一些改变。在评论中提到了其中的大部分:
1.不要使用保留的标识符(
_
前缀)。1.不要从
malloc()
强制转换void *
。1.检查所有
malloc()
的返回值。1.更喜欢将变量而不是类型传递给
sizeof
。1.让调用者决定如何处理错误。
1.将
srand()
移动到main()
。这使得打印种子时很容易产生错误。free(array)
如果array->data
的malloc()
失败,否则它泄漏,现在我们return NULL
失败。free()
数组。你可能想写一个有这两个的函数。1.首选初始化变量(
Array *array = malloc(...);
而不是Array *array;
)。min
和max
未初始化。你能吗