C语言中简单内存移动功能的一个例外

时间:2018-03-12 10:49:47

标签: c memory-leaks

我正试图用一个简单的功能来移动记忆。这听起来像一个简单的工作。 但是,当我使用C语言在VS 2013中运行测试代码时,在第15行发生了损坏。非常感谢yuor时间。 :)

这是源代码:

#include <stdio.h>

void* mMemmove(void* dest, const void* src, size_t n)
{
    char* mdest = dest;
    const char* msrc = src;

    if (msrc < mdest)
    {
        msrc += n;
        mdest += n;

        while (n-- != 0)
        {
            *mdest = *msrc;   // where exception occurs !!  
             --mdest;
             --msrc;
             // It was not this function having bug,  but the 
                       //variabe I declare in the main function that cause 
                       //the exception.
        }
    }
    else
    {
        while (n-- != 0)
        {
            *mdest = *msrc;  
            ++mdest;    
            ++msrc;
        }
    }


    return mdest;
}

int main(int argc, const char* argv[])
{
    //char* str1 = "asdfghjkl";
    //char* str2 = "as";                 BUG!

    char str1[] = "asdfghjkl";   
    char str2[] = "as";

    mMemmove(str2, str1, 5);
    puts(str1);
    putchar('\n');
    puts(str2);


    return 0;
}

VS2013和win10中的结果显示在

后面的链接中

https://i.stack.imgur.com/LIp6h.png

更新:为什么我写这个如果brach

https://i.stack.imgur.com/Fj5ew.png

1 个答案:

答案 0 :(得分:0)

我认为你正在转向RO内存。看看你如何定义str1str2 - 它们指向const char*。 Visual Studio应该在这些行上给你一个警告。

尝试定义新缓冲区并将数据移动到它。

我也不完全理解if ......什么/为什么?