C語言 malloc 為結構體成員指標申請記憶體

2021-09-28 23:23:55 字數 1191 閱讀 6589

問題:當乙個結構體的成員為指標型別時,為這個結構體申請記憶體時,並不會給指標成員分配記憶體。

程式如下:

#include #include typedef struct example

example_t;

int main(int argc, char** ar**)

printf("%p\n", exam);

printf("%p\n", exam->a);

printf("%p\n", exam->b);

free(exam);

return 0;

}

結果如下:

$ gcc exam.c

$ ./a.out

0x1051150

(nil)

(nil)

可見結構體當指標成員是不會被分配記憶體的。

解決方案:給結構體申請空間的時候,同時給指標成員申請空間

#include #include typedef struct example

example_t;

int main(int argc, char** ar**)

printf("%p\n", exam);

printf("%p\n", exam->a);

printf("%p\n", exam->b);

printf("\n");

exam->a = (int *)malloc(sizeof(int));

exam->b = (char *)malloc(sizeof(char));

printf("%p\n", exam);

printf("%p\n", exam->a);

printf("%p\n", exam->b);

free(exam);

free(exam->a);

free(exam->b);

return 0;

}

結果如下:

$ gcc exam.c 

$ ./a.out

0xd8d150

(nil)

(nil)

0xd8d150

0xd8d568

0xd8d578

此時,結構體的指標成員都有被分配記憶體。

C語言訪問結構體成員

c語言中有 和 這兩個運算子都是用來訪問結構體 的。比如有結構體 struct student 並且有兩個變數 struct student zhangsan struct student p p zhangsan 你要留意zhangsan是結構體的名 字,p是指向這個結構體的指標 那麼訪問結構體的...

c語言 得到結構體成員偏移

struct stru printf offset of stru.i ld n size t char s.i char s printf struct stru 0 i ld n size t struct stru 0 i 標準庫中定義了函式offsetof type,member 直接使用即...

結構體指標malloc

有如下結構體型別 typedef struct test,ptest 定義乙個結構體指標,結構體指標指向的元素buffer指向32位元組的字串 ptest pdata pdata test malloc sizeof test 32 此時pdata指向的記憶體空間分配如下 如果需要讀寫buffer指...