Я пытаюсь создать массив (динамически) и заполнить его случайными числами.
Я в Linux.Программа компилируется без ошибок.Это код C:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void create_array(int **, int);
void populate_array(int *X, int size, int low, int high);
void display_array(int *X, int size);
int main()
{
int *A = NULL;
int size = 7;
int low = 10;
int high = 1000;
create_array(&A, size);
populate_array(A, size, low, high);
display_array(A, size);
return 0;
}
void create_array(int **X, int size)
{
*X = (int *)(malloc(size));
}
void populate_array(int *X, int size, int low, int high)
{
srand(time(0));
for (int i = 0; i < size; ++i)
{
*(X + i) = low + rand() % (high + 1 - low);
}
}
void display_array(int *X, int size)
{
for (int i = 0; i < size; ++i)
{
if (i % 10 == 0)
printf("\n");
printf("%d\t", *(X + i));
}
printf("\n");
}
Однако, когда я его запускаю, я получаю следующую ошибку:
malloc.c:2394: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Aborted (core dumped)
Эта ошибка возникает только для size = 7
.Для более низких значений это все хорошо.Но для более высоких ценностей это другая история!Вывод для size = 20
:
455 526 335 719 907 695 1041 0 154481972 154546741
154481459 154743095 154482992 875836721 960049720 926419250 909326389 154219063 808465977 842479924
Напротив, та же самая программа (почти) на C ++ дает ожидаемый результат.Вот код:
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
void create_array(int *&, int);
void populate_array(int *X, int size, int low, int high);
void display_array(int *X, int size);
int main()
{
int *A;
int size = 100;
int low = 10;
int high = 1000;
create_array(A, size);
populate_array(A, size, low, high);
display_array(A, size);
return 0;
}
void create_array(int *&X, int size)
{
X = new int[size];
}
void populate_array(int *X, int size, int low, int high)
{
srand(time(0));
for (int i = 0; i < size; ++i)
{
X[i] = low + rand() % (high + 1 - low);
}
}
void display_array(int *X, int size)
{
for (int i = 0; i < size; ++i)
{
if (i % 10 == 0)
cout << endl;
cout << X[i] << "\t";
}
cout << endl;
}
Что я делаю не так?