Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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
memcpy在释放模式下出现故障_C_Visual Studio 2008 - Fatal编程技术网

memcpy在释放模式下出现故障

memcpy在释放模式下出现故障,c,visual-studio-2008,C,Visual Studio 2008,我有一段代码在VisualStudio的调试模式下运行良好,但在发布模式下崩溃。经过大量的猜测,我找到了导致崩溃的代码 char *buff ="some random text"; char *temp = NULL; char *pos = NULL; int len = strlen("random text"); pos = strstr(buff,"random"); temp = (char *) malloc(len+1); memset(temp,0,len+1); memcp

我有一段代码在VisualStudio的调试模式下运行良好,但在发布模式下崩溃。经过大量的猜测,我找到了导致崩溃的代码

char *buff ="some random text";
char *temp = NULL;
char *pos = NULL;
int len = strlen("random text");

pos = strstr(buff,"random");
temp = (char *) malloc(len+1);
memset(temp,0,len+1);
memcpy(temp,pos,len);

这在调试模式下非常有效,但在发布时崩溃。有人能指出错误吗?

它看起来是合法的,像往常一样有一些小毛病:

  • 使用更多的
    const
    buff
    pos
    len
    都应该声明为
    const
  • 最重要的是,在访问内存之前检查
    malloc()
    的返回值

  • 显示的代码部分看起来不错。作为对unwind答案的补充。失败的可能原因可能是

    1) 未初始化变量

    2) 预处理器符号_DEBUG和NDEBUG。如果在#ifdef#u DEBUG/#endif块中有任何代码


    3) 使用malloc try时的编译器优化

    temp  = malloc((len + 1) *sizeof(*temp));
    

    试过之后,malloc会返回内存,所以这不是问题。你在关闭优化后试过了吗?所以最好在发布模式下开始调试。你可以调试发布版本。只需转到“项目->设置”,选择Win32版本配置,选项卡“C/C++”,“常规”,并将“调试信息”设置为“程序数据库”。然后转到“链接器”选项卡,并打开“生成调试信息”。如果现在重建项目,则可以在调试器中运行它。不管你的程序是否崩溃或者只是没有按照预期的方式运行,在调试器中运行它都会告诉你原因。我发现了问题,我是在代码上方的一个地方做的,strlen(temp+3)而不是strlen(temp)+3!!感谢您的帮助我在VisualStudio2010中以调试模式和发布模式检查了这段代码。。。它工作得很好。我假设您怀疑大型程序中的这段代码。。我不得不说,这部分并不是在制造麻烦,你是否“释放”了指针allocated@hazzelnuttie我修复了这个问题,我在代码上方的一个地方做,strlen(temp+3)而不是strlen(temp)+3!!这是毫无意义的,
    sizeof*temp==sizeof(char)==1
    ,因此按此缩放没有任何效果。