有關malloc的相當簡單的問題。分配區域內可以設置的最大值是多少。例如:哪個指針值是malloc調用的最大值
char *buffer;
buffer = malloc(20);
buffer[19] = 'a'; //Is this the highest spot I can set?
buffer[20] = 'a'; //Or is this the highest spot I can set?
free(buffer);
有關malloc的相當簡單的問題。分配區域內可以設置的最大值是多少。例如:哪個指針值是malloc調用的最大值
char *buffer;
buffer = malloc(20);
buffer[19] = 'a'; //Is this the highest spot I can set?
buffer[20] = 'a'; //Or is this the highest spot I can set?
free(buffer);
您的問題的措辭是有點關閉。你的意思是「我可以用於分配的內存塊的最大索引是多少」。答案與數組相同。
如果你正在讀或寫的內存,你可以放心的使用0到1之間的索引(包括)比塊的大小少一個(在你的情況,這意味着指數19)。總之,這意味着你可以訪問你要求的20個值。
如果僅獲得指針具有相同塊內的其它指針的比較(和你不會讀或寫至其),則可以額外地獲取指針的一過去的最端(在你的情況下,這意味着索引20)。
爲了舉例說明這些東西:
是,buffer[19] = 'a';
是你可以在讀或寫能力進入最後的值。不要忘記,如果你想在這個存儲器中存儲一個字符串,並把它交給期望以空字符結尾的字符串的函數,那麼這個插槽是你最後一次把這個值設置爲'\0'
的機會。
你被允許訪問buffer[20]
以下方式:
char *p;
for(p = &buffer[0]; p != &buffer[20]; ++p)
{
putc(*p, stdout);
}
這是非常有用的,因爲我們往往會遍歷內存和存儲大小的方式。如果我們不得不在整個地方減去1,那麼這會使我們的代碼不易讀。
哦,它給你的絕招:
size_t buf_size = 20;
char *buffer = malloc(buf_size);
char *start = buffer;
char *end = buffer + buf_size;
size_t oops_i_forgot_the_size = end - start;
malloc(x)
將分配x
字節。
所以通過訪問buffer[0]
你訪問第一個字節,通過訪問buffer[1]
你訪問第二個。
例如
char * buffer = (char *) malloc(1);
buffer[0] = 0; // legal
buffer[1] = 0; // illegal
使用malloc的簡單情況下隨着一個malloc(1),可以我只設置緩衝液[0] = 'a' 或我還可以設置緩衝液(1) – pm100
工作說出來[1] ='a'?在C中只記得 – Rorschach
,索引是0的。所以第一個元素的索引是0. – Shiping