Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ bzero和将char数组设置为'\0';?_C++_Buffer - Fatal编程技术网

C++ bzero和将char数组设置为'\0';?

C++ bzero和将char数组设置为'\0';?,c++,buffer,C++,Buffer,我目前有一个功能: void clearBuffer(char* buffer, int length) { for(int i=0; i < length; i++){ buffer[i] = '\0'; } } 实施: Message::Message() { clearBuffer(msg, MAXLEN); } 只是为了好玩,我将函数改为使用bzero: void clearBuffer(char* buffer, int length) { bze

我目前有一个功能:

void clearBuffer(char* buffer, int length)
{
    for(int i=0; i < length; i++){ buffer[i] = '\0'; }
}
实施:

Message::Message()
{ 
    clearBuffer(msg, MAXLEN); 
}
只是为了好玩,我将函数改为使用
bzero

void clearBuffer(char* buffer, int length)
{
    bzero(buffer, length);
}
现在函数运行了,我没有收到
非法指令
错误

这两个功能不相等吗?首先是什么导致了错误


注意:我只有在我的一个虚拟机上运行代码时才会遇到这个问题。当我在真正的生产机器上运行时,没有出现非法指令。

你使用什么编译器?

与原始的
clearBuffer()
之间的主要区别是
bzero()
可能快得多。如果上述代码崩溃,可能除了这两个函数之间的差异之外,还有其他原因在起作用:错误的描述听起来像是在覆盖堆栈,例如,通过执行
char buffer[1]来实现;新(缓冲区)消息()
MAXLEN
在你所有的翻译单位中都是一样的吗?将调用替换为
clearBuffer(msg,sizeof msg)
。我很可能只需将
msg()
放在构造函数初始值设定项列表中,并将其调用一天。然而,这是一个更大的问题的根源,要么是
消息
对象本身在伪内存中被实例化,要么正如Kerrek指出的那样,在翻译单元之间存在冲突的
MAXLEN
。可能需要更多的代码(具体地说,是促使构建的堆栈的更上层的代码)。@Pavel Anossov我使用的是
g++-4.7
。另一个奇怪的是,我只有一台虚拟机有这个问题。当我在真正的生产机器上运行这个时,没有出现
非法指令。
void clearBuffer(char* buffer, int length)
{
    bzero(buffer, length);
}