我正试图用一个简单的功能来移动记忆。这听起来像一个简单的工作。 但是,当我使用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
答案 0 :(得分:0)
我认为你正在转向RO内存。看看你如何定义str1
和str2
- 它们指向const char*
。 Visual Studio应该在这些行上给你一个警告。
尝试定义新缓冲区并将数据移动到它。
我也不完全理解if
......什么/为什么?