C/C++ 使用動態記憶體

C/C++ 使用動態記憶體

之前常遇到不知道怎麼動態的使用記憶體

例如當我有這樣的需求

#include

define magic_size=15

struct{

char * magic[magic_size];

int count;

int* number[count];

}

我需要一個陣列,它的大小是依據 count 變數而產生,也就是一個動態的陣列。

一般寫法如第 4 行,宣告振列順便給大小,先把記憶體空出來。

但我需要的是第 6 行,動態大小的陣列,但是這行是錯誤的,編譯的時候 count 還不知道到底是多少!

動態陣列好處就是不會浪費記憶體空間,因為不需要事先預估一個大小,萬一用不到又浪費記憶體;反之,不夠用又很麻煩

參考了一些書籍和實作之後,發現可以用 指標+字串+記憶體 來解決

#include

#include

define magic_size=15

struct{

char * magic[magic_size];

int count;

int* number;

} member;

int main(){

int t = 0;

member.count = 10;

member.number = (int*)malloc(sizeof(int)*member.count);

for (t = 0; t<=member.count; t++){

member.number[t]=0;

}

free(member.number);

}

在結構中先宣告成 int* number

實際要用到的時候才去跟系統要記憶體,這時候必須要知道自己要多大的區塊

member.number = (int*)malloc(sizeof(int)*member.count);

因為宣告的時候是 int* 所以要強制轉型

大小則是 sizeof(int)*count ,和陣列一般大小

使用就當一般陣列用啦!

要記得 free 掉就是了!

convert from Thomas blog post id 133 old convert log: ./091615/tag%3E2007%2007%20cc)

@2007 @07 @cc

Comments