繁体   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