c - C语言中简单内存移动函数的异常

标签 c memory-leaks

我正在尝试编写一个简单的函数来移动内存。这听起来很容易。 然而,当我在 VS 2013 中用 C 语言运行测试代码时,第 15 行发生了损坏。非常感谢您抽出宝贵的时间。 :)

这是源代码:

#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中的结果如下链接所示

/image/LIp6h.png

更新:为什么我写这个 if brach

/image/Fj5ew.png

最佳答案

我认为你正在转向 RO 内存。看看您如何定义 str1str2 - 它们指向 const char*。 Visual Studio 应该在这些方面向您发出警告。

尝试定义一个新的缓冲区并将数据移至其中。

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

关于c - C语言中简单内存移动函数的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49233369/

相关文章:

iPhone 位图性能

ios - 在单个 ViewController 应用程序中,内存保留周期是不可能的吗? ( swift/IOS)

java - Tomcat 7 中的内存泄漏 Grails 应用程序

C - 如何更改函数外部的指针?

c++ - C/C++ 行号

javascript - IE内存消耗分析工具

java - 为什么 webappclassloader 没有被垃圾回收?

c - 如何确保以 2 位小数输入的浮点变量保留其精确值

c - C 中的字符串反转 : What is it I am doing wrong?

c++ - C++ 和 C 使用同一种链接器吗?