为struct指针分配空间

时间:2010-02-12 21:37:03

标签: c sizeof

在另一篇文章link text

我试图用结构做同样的事情,但我的sizeof运算符有问题,所以在整数的情况下,我这样做了:

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

在结构案例中,我这样做了:

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

但我收到错误:sizeof的应用程序无效到struct TEST的不完整类型。

有什么想法?感谢。

3 个答案:

答案 0 :(得分:3)

因为您将结构定义为

 typedef struct { ... } TEST;

你应该始终将结构称为TEST,而不是struct TEST,即使用

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

要使用struct TEST,您需要实际命名结构,即

 struct TEST { ... };

您可以同时使用

 typedef struct TEST { ... } TEST;

答案 1 :(得分:0)

#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

答案 2 :(得分:0)

变化:

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));