спасибо, что нашли время, чтобы прочитать это.
В моем вопросе «вектор» определяется как одномерный массив целых чисел.
Следовательно, массив векторов будет двумерным массивом, в котором каждый вектор может иметь разную длину.
Меня просят использовать:
int ** векторы - 2D массив
int size - целое число, представляющее, сколько векторов существует внутри ** векторов
int * sizes-1D массив целых чисел, который представляет длину векторов
например, для:
векторы = {{4,3,4,3}, {11,22,33,44,55,66}, NULL, {5}, {3,33,333,33,3}}.
размер 5 (внутри 5 векторов).
размеры: {4,6,0,1,5} (4 - длина первого вектора и т. д.).
Размер вводится пользователем в начале функции main (), а ** векторы и * размеры распределяются по значению размера.
Меня попросили написать функцию:
int init (int *** векторы, int ** размеры, int размер), который инициализирует ** векторы, чтобы быть массивом NULL и * размеры, чтобы быть массивом нулей.
Я придумал этот код:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int init(int*** vectors, int** sizes, int size)
{
int i, k,j;
printf("check\n");
*vectors = (int**)malloc(size * sizeof(int*));
if (*vectors == NULL)
return 0;
for (i = 0; i < size; i++)
{
*(vectors + i) = NULL;
}
printf("check 2\n");
for (k = 0; k<size; k++)
{
if (*(vectors+k) != NULL)
printf("didn't work\n");
else
printf("current is null\n");
}
*sizes= (int*)malloc(size * sizeof(int));
if (*sizes == NULL)
return 0;
for (j= 0; j < size; j++)
{
*(sizes + j) = 0;
printf("%d ", *(sizes + j));
}
printf("\n");
return 1;
}
int main()
{
int size, i;
int** vectors = NULL;
int* sizes = NULL;
printf("\nPlease enter an amount of vectors:\n");
scanf("%d", &size);
printf("%d\n", init(&vectors, &sizes, size));
printf("size is %d now\n", size);
// for (i = 0; i < size; i++)
// printf("%d ", *(sizes+i));
printf("check 3\n");
free(sizes);
free(vectors);
printf("check 4\n");
printf("check 5\n");
return 0;
}
забыл упомянуть, что init возвращает 0, если не удается выделить память, и 1 в противном случае.
печать "чеков" была так, чтобы я мог видеть, где программа терпит неудачу.
проблема в том что после печати последней проверки (проверка 5)
Сбой программы. (Ошибка проверки времени выполнения # 2)
если бы кто-нибудь мог помочь мне понять, что я делаю неправильно, я был бы очень признателен.
Большое спасибо за чтение и хорошего дня.
Редактирование:
я также напечатал размеры / векторы массива внутри init, просто чтобы посмотреть, печатает ли он нули / нули, на самом деле мне не нужно это делать.