簡體   English   中英

在指向數組的指針上調用 memset?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM