我正在尝试编写一个简单的函数来移动内存。这听起来很容易。 然而,当我在 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中的结果如下链接所示
更新:为什么我写这个 if brach
最佳答案
我认为你正在转向 RO 内存。看看您如何定义 str1
和 str2
- 它们指向 const char*
。 Visual Studio 应该在这些方面向您发出警告。
尝试定义一个新的缓冲区并将数据移至其中。
我也不完全理解如果
...什么/为什么?
关于c - C语言中简单内存移动函数的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49233369/