Другие языки программирования и технологии
Помогите найти ошибку Си
void generate_array(int **a, int n) { srand((unsigned)time(NULL)); a=(int **)malloc(n * sizeof(int *)); for (i = 0; i < n; i++) a=(int*)malloc(sizeof(int)*n); for(i=0; i<n;>[j] = rand(); } void out_array(int **a, int n) { for (i = 0; i < n; i++) for(j=0; j<n;>[j]); printf("\n"); } Компилятор код хавает, но во время работы функции out_array стопарится на printf . В чем ошибка? Суть функций: ввод двумерного массива и вывод.
Зачем столько громозды? Можно обойтись одним одномерным массивом размером n*n
int* generate_array(int n)
{
int i, s, *p;
s = n*n;
p = (int*)malloc(s * sizeof(int));
srand((unsigned)time(NULL));
for (i = 0; i < s; ++i)
{
p[ i ] = rand();
}
return p;
}
void out_array(int *a, int n)
{
int i, j, *p;
for (i = 0; i < n; ++i)
{
p = &a[n*i];
for(j = 0; j < n; ++j)
{
printf("%d ", p[j]);
}
printf("\n");
}
}
int main()
{
int *a = generate_array(5);
out_array(a, 5);
free(a);
return 0;
}
А эксепшен потому что в generate_array указатель остается в локальной переменной, и в место вызова не передается.
Если следовать твоей логике, то нужно передать указатель на указатель на указатель
void generate_array(int ***a, int n)
{
*a=(int **)malloc(n * sizeof(int *));
}
int* generate_array(int n)
{
int i, s, *p;
s = n*n;
p = (int*)malloc(s * sizeof(int));
srand((unsigned)time(NULL));
for (i = 0; i < s; ++i)
{
p[ i ] = rand();
}
return p;
}
void out_array(int *a, int n)
{
int i, j, *p;
for (i = 0; i < n; ++i)
{
p = &a[n*i];
for(j = 0; j < n; ++j)
{
printf("%d ", p[j]);
}
printf("\n");
}
}
int main()
{
int *a = generate_array(5);
out_array(a, 5);
free(a);
return 0;
}
А эксепшен потому что в generate_array указатель остается в локальной переменной, и в место вызова не передается.
Если следовать твоей логике, то нужно передать указатель на указатель на указатель
void generate_array(int ***a, int n)
{
*a=(int **)malloc(n * sizeof(int *));
}
каким именно образом стопорится?
Пройдись дебаггером по всем функциям - посмотри может какое то значение битое, или у тебя при выводе происходит выход за пределы массива
Пройдись дебаггером по всем функциям - посмотри может какое то значение битое, или у тебя при выводе происходит выход за пределы массива
а почему так заморочено с malloc ?
new вполне достаточно и проще.
и
void generate_array(int **a, int n)
нужно возвратить параметр а :
int ** generate_array(int **a, int n)
{
srand(time(0));
// выделение памяти для массива а
a =new int*[n];
for (int i=0; i<n;> = new int[n];
//...
//забиваеш числами
//...
return a;
}
вторая функция (передаеш полученый с первой функции резлуьтат) :
void out_array(int **a, int n)
{
for (int i = 0; i < n; i++)
{
for(int j=0; j < n; j++)
printf(a[ i ][ j ], " ");
printf("\n");
}
}
Попробуй сделать на таком примере, не проверял в студии на работоспособность.
Удачи.
new вполне достаточно и проще.
и
void generate_array(int **a, int n)
нужно возвратить параметр а :
int ** generate_array(int **a, int n)
{
srand(time(0));
// выделение памяти для массива а
a =new int*[n];
for (int i=0; i<n;> = new int[n];
//...
//забиваеш числами
//...
return a;
}
вторая функция (передаеш полученый с первой функции резлуьтат) :
void out_array(int **a, int n)
{
for (int i = 0; i < n; i++)
{
for(int j=0; j < n; j++)
printf(a[ i ][ j ], " ");
printf("\n");
}
}
Попробуй сделать на таком примере, не проверял в студии на работоспособность.
Удачи.
Похожие вопросы
- помогите найти ошибку в коде на Си
- Помогите найти ошибку Delphi легкая программка
- Помогите найти ошибку в калькуляторе Си
- программирование C++. Помогите найти ошибку
- Помогите найти ошибку в коде
- Помогите найти ошибку qbasic
- Помогите найти ошибку в коде. делфи
- Помогите найти ошибку в задачи,Паскаль...
- Помогите найти ошибки в коде (паскаль)
- Помогите найти ошибку...Pascal (строки)