c调试问题,免费方法

Ser*_*gey 0 c debugging free

我有C程序的问题:

char *str = (char *) malloc(20);
strcpy_s(str, 10, "abcdefghij");

//here I change one byte before str and one byte after
*((int*)str-1) = 10;
*((int*)(str+20)) = 10;

//and it stops on the..

free(str);
Run Code Online (Sandbox Code Playgroud)

在调试过程中出错了什么?

覆盖未分配内存的部分是任务的一部分.我知道通常它不正确,但在这种情况下它是任务的一部分.

Arm*_*yan 5

为什么你认为你有权改变任何位于str-1?你没有:)

看来你还有另一个问题,因为第一个问题的生动性超出了我的注意力.你可以存取权限的地址,从变化str + 0str + 19.str + 20超出你的境界:)

这两件事都会导致所谓的未定义行为.这意味着你不会对任何行为感到惊讶!包括失败free,调试器崩溃或其他任何事情