Проблема инициализации массива структур со списком данных - PullRequest
0 голосов
/ 24 апреля 2020

Я обнаружил, что устраняю неполадки довольно долго и пытаюсь выяснить, что не так с моей функцией. Я должен сказать, что я не уверен на 100%, если это правильный синтаксис, чтобы делать то, что я хочу. У меня есть эта функция, которая предполагает инициализацию одномерного массива структур со списком данных. Все до этой функции работало и проверялось. Это проблематично c fun c:

Three* createThreeArr(Three** arr, ListThree** head, int counter)
{
    int i = 0;
    ListThree* pIndex = *head;
    *arr = (Three*) calloc(counter,sizeof(Three));
    for (i = 0; i < counter ; i++)
    {
        (arr[i])->col   = pIndex->data.col;
        (arr[i])->row   = pIndex->data.row;
        (arr[i])->value = pIndex->data.value;
        pIndex = pIndex->next;
    }
     return *arr;
}

Я могу вставить в первую итерацию, но в VS19 выдано исключение. Вот как я передаю параметры:

*arr = createThreeArr(arr,head,counter); 

Это структуры:

typedef struct Three 
{
  int value;
  int row;
  int col;
}Three;

typedef struct ListThree
{
  struct Three data;
  struct List* next;
}ListThree;

Это мой 'main'

void Ex3()
{ 
    Three* arr = NULL;
    ListThree* head = NULL;
    createArrayAndList(matrix,rows,cols,&head,&arr);
}

Эта функция createArrayAndList:

int createArrayAndList(int** matrix,int rows, int cols, ListThree** head, Three** arr)
{
    int i, j, counter = 0;
    Three three;

    for (i = 0; i < rows; i++)
    {
        for (j = 0; j < cols; j++)
        {
            if (matrix[i][j] == i + j)
            {
                counter++;
                three = createThree(matrix[i][j],i,j);
                *head = createThreeList(head,three);
            }
        }
    }
    *arr = createThreeArr(arr,head,counter);

    return counter;
}

Спасибо, ребята, дайте мне знать, если вы хотите, чтобы я предоставил больше информации. Я надеюсь, что это не глупый вопрос. :(

1 Ответ

0 голосов
/ 24 апреля 2020

Имея

typedef struct ListThree
{
  struct Three data;
  struct List* next;
}ListThree;

и

Three* createThreeArr(Three** arr, ListThree** head, int counter)
{
    int i = 0;
    ListThree* pIndex = *head;

в createThreeArr назначение

 pIndex = pIndex->next;

недопустимо, поскольку pIndex->next имеет значения struct List*, а не ListThree*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...