Я новичок в C и пытаюсь решить этот вопрос.Это продолжение последнего потока, который я создал .Я добился определенного прогресса, но мне еще многое предстоит выучить и исправить.
Короче говоря:
В этом вопросе «вектор» - это одномерный массив целых чисел.Следовательно, массив векторов будет двумерным массивом, который содержит одномерные массивы внутри него.
Мне нужно использовать эти переменные:
- int ** векторы - массив 2D
- int size - целое число, представляющее, сколько векторов существует внутри **векторы
- int * sizes-1D массив целых чисел, представляющий длину векторов
Мне нужно написать следующие функции:
int init (int *** векторы, int ** размеры, int размер)
функция распределяет память для ** векторов и * размеры с размером и инициализирует векторы, чтобы быть полными NULL,и размеры должны быть заполнены нулями.
int set (int ** векторы, int * размеры, int index, int * tmp, int tmp_size)
функция получает массив нулей (** векторов)), освобождает вектор внутри ** векторов, индекс которых является индексом, и выделяет память для нового вектора, длина которого равна tmp_size, и помещает в него элементы * tmp.
Это мой код:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int init(int*** vectors, int** sizes, int size)
{
int i, k,j;
*sizes = (int*)malloc(size * sizeof(int));
if (*sizes == NULL)
return 0;
for (j = 0; j < size; j++)
{
(*sizes)[j] = 0;
}
*vectors = (int**)malloc(size * sizeof(int*));
if (*vectors == NULL)
return 0;
for (i = 0; i < size; i++)
{
(vectors)[i] = NULL;
}
return 1;
}
int set(int **vectors, int *sizes, int index, int *tmp, int tmp_size)
{
if ((vectors)[index] != NULL)
{
free((vectors)[index]);
}
(vectors)[index] = (int*)malloc(tmp_size * sizeof(int));
if ((vectors)[index] == NULL)
return 0;
for (int b = 0; b < tmp_size; b++)
{
(vectors)[index][b] = tmp[b];
}
sizes[index] = tmp_size;
return 1;
}
int main()
{
int size, i, length, indexhere;
int** vectors = NULL;
int* sizes = NULL;
int* tmp = NULL;
int* p = &vectors;
int tempindex;
printf("\nPlease enter an amount of vectors:\n");
scanf("%d", &size);
init(p, &sizes, size);
printf("Enter index\n");
scanf("%d", &indexhere);
printf("Enter Length\n");
scanf("%d", &length);
tmp = (int*)malloc(length * sizeof(int));
printf("Enter elements:\n");
for (int g = 0; g < length; g++)
scanf("%d", &tmp[g]);
set(&vectors, sizes, indexhere, tmp, length);
system("pause");
return 0;
}
Может кто-нибудь объяснить, почему программа всегда падает?