2010-02-12 123 views
0

在另一篇文章中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無效的應用程序不完全類型結構的測試。

有什麼想法?謝謝。

回答

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; 
+0

+1:打我 – tur1ng 2010-02-12 22:01:45

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 
+0

編輯您的疑問句而不是添加答案,謝謝。 – kennytm 2010-02-12 21:57:08

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