Выделение пространства для указателей на структуру - PullRequest
0 голосов
/ 13 февраля 2010

В другом посте текст ссылки

Я пытаюсь сделать то же самое со структурой, но у меня проблема с оператором sizeof, поэтому в целочисленном случае я сделал это:

size_t totalMem = rows * sizeof(int *) + rows * cols * sizeof(int));

И в случае структуры я сделал это:

size_t totalMem = (rows * sizeof(struct TEST *)) + (rows * cols * sizeof(struct TEST));

Но я получаю ошибку: неправильное применение sizeof к неполному типу структуры TEST.

Есть мысли? Спасибо.

Ответы [ 3 ]

3 голосов
/ 13 февраля 2010

Поскольку вы определяете структуру как

 typedef struct { ... } TEST;

Вы всегда должны ссылаться на структуру как TEST, а не struct TEST, т.е. использовать

* +1007 *

Чтобы использовать struct TEST, вам нужно фактически назвать структуру, т.е.

 struct TEST { ... };

Вы можете разрешить оба с

 typedef struct TEST { ... } TEST;
0 голосов
/ 13 февраля 2010

Изменение:

typedef struct MYTEST
{
   char charObj;
   short shortObj;
   long longObj;
   double doubleObj;
} TEST;

и

size_t totalMem = (rows * sizeof(struct TEST *)) + (rows * cols * sizeof(struct TEST));

до

size_t totalMem = (rows * sizeof(struct MYTEST *)) + (rows * cols * sizeof(struct MYTEST));
0 голосов
/ 13 февраля 2010
#include <stdio.h>
#include <stdlib.h>

#include "C2_Assignment_5_Exercise_2_Driver.h"

как часть моего выражения size_t. И тогда определение в файле .h:

#ifndef C2_ASSIGNMENT_5_EXERCISE_2_DRIVER_H
#define C2_ASSIGNMENT_5_EXERCISE_2_DRIVER_H

typedef struct
{
   char charObj;
   short shortObj;
   long longObj;
   double doubleObj;
} TEST;

#endif
...