簡體   English   中英

memset不起作用(C)

[英]memset does not work (C)

char path[25500]= {};//iniatize
int visited[2500]= {0};//iniatialize
void fun();//protype

int main(){
    fun();
}

void fun(){
    visited[2300]=1;
    path[0]='9';
    printf("\n%d %s",visited[2300],path);
    memset(path,0,25500);//reset
    memset(visited,0,2500);//reset
    printf("\n %d %s",visited[2300],path);//to see if resetted
}

輸出為:

1 9
1

我想像開始一樣重設。 但是如您所見,memset不會重置。 我的編譯器是代碼塊。

memset(visited,0,2500);//reset

訪問的是整數數組,因此應為

memset(visited, 0, 2500 * sizeof(int))

memset接受要設置的字節數,而不是元素數。 更改此行:

memset(visited,0,2500);

對於這樣的事情,它應該工作:

memset(visited, 0, 2500 * sizeof(int));
//or like this: memset(visited, 0, sizeof(visited));
memset(visited, 0, 2500)

套2500個字節0從那里visited來分。

然而visited referrs到更多的內存,它的元素類型的大小,即2500倍。 那是2550 * sizeof(visitied[0])

也是

    memset(visited, 0, 2500 * sizeof(visited[0])

將所有visited都設為0

您的代碼使用第2300個元素。 因此,假設一個元素的大小為4它在偏移9200 visited ,你的代碼只有0退房手續2500個字節,因此第二千三元素撐由呼叫無動於衷到memset()


參考下面的評論:她是在OP上下文中使用memset()的可靠方式的完整摘要:

#define VISITED_MAXIMUM (2500)

int visited[VISITED_MAXIMUM] = {0} /* line 3 */

/* Tons of code here . */

memset(visited, 0, VISITED_MAXIMUM * sizeof(*visited)); /* line X */

上面的這種構造(第X行)可以通過將第3行替換為:而無需調整對動態內存分配的更改而得以保留:

int * visited = calloc(VISITED_MAXIMUM, sizeof(*visited));
if (NULL == visited)
  exit(1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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