[英]Calling memset on pointer to array?
我不認為我在這里理解了什么......
bool (*lookup)[100];
memset(lookup, 0, 100 * sizeof(*lookup));
我正在嘗試初始化一個指向堆棧分配數組的指針(該指針只會傳遞給堆棧幀內的調用)。 memset 用於將數組初始化為 0。
前面的代碼導致段錯誤,難道memset不喜歡指針?
通過做
memset(lookup, 0, 100 * sizeof *lookup);
您沒有“初始化指針”,而是指針lookup
指向的內存。
並且很可能在調用memset()
之前,您沒有將指針指向某個有效內存,因此寫入隨機內存會調用未定義的行為,這會導致程序崩潰。
有幾種方法可以獲得有效內存。
像這樣從堆棧中獲取它:
bool lookup_instance[100] = {0};
bool (*lookup)[100] = &lookup_instance;
/* No need to memset it to 0s as this had been done by ... = {0} already. */
或者像這樣自己得到它:
bool (*lookup)[100] = malloc(sizeof *lookup);
if (NULL == lookup)
{
perror("malloc() failed"):
}
else
{
memset(lookup, 0, sizeof *lookup);
}
最短的解決方案是:
bool (*lookup)[100] = calloc(1, sizeof *lookup);
if (NULL == lookup)
{
perror("calloc() failed");
}
else
{
/* No need to memset it to 0s as this has been done by calloc() already. */
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.