我发布了一个问题并在这里得到了答案。这是我在 VC2010 上调试的代码。我得到最后显示的运行时错误。使用 sdir有什么问题?
#include<iostream>
#include<stdlib.h>
#include<windows.h>
void make_dir(int depth, char *dir) {
if (depth < 3) {
CreateDirectoryA (dir,NULL);
for (int i = 0; i < 10; i++) {
char *sdir= (char*)malloc(strlen(dir+10)); // XXX 10?
strcpy(sdir, dir);
sprintf(sdir + strlen(sdir), "\\%d", i);
printf("%s\n", sdir);
CreateDirectoryA(sdir,NULL);
make_dir(depth + 1, sdir);
free(sdir);
}
}
}
int main()
{
make_dir(0,"dir");
return 1;
}
错误是:
HEAP [mkdir.exe]:004114E8 处的堆块在 00411514 处修改,超过 24 个 Windows 的请求大小已触发 mkdir.exe 中的断点。
这可能是由于堆损坏,这表明 mkdir.exe 或其已加载的任何 DLL 中存在错误。
这也可能是由于用户在 mkdir.exe 获得焦点时按 F12。
输出窗口可能有更多诊断信息。程序“[3008] mkdir.exe: Native”已退出,代码为 0 (0x0)。