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