【发布时间】:2014-12-05 14:16:54
【问题描述】:
LPTSTR name = NULL;
DWORD nameLength = 0;
namelength = host->nameLength; // returns 10
name = (LPTSTR) malloc( sizeof(nameLength * sizeof(TCHAR))); //crashes here
我现在不明白它崩溃的原因。有人能解释一下原因吗?
更新=*(删除了崩溃行之后的下一行,是误复制了。只是代码中注释掉的一行)
更新: 对不起,伙计们,在问这个问题之前,我已经尝试了你所描述的所有方法。没用。
我认为这是其他一些问题。这是一个 Windows 服务,在计算机启动时调用上面的函数(从 dll 中),所以使用 windbg 远程调试 dll (我在函数被调用之前使用硬编码的 debugbreak 闯入)。
当我完成 malloc 步骤并给出“下一步”指令 (F10) 时,它不会进入下一步,而是说客户端正在运行,但随后突然在 nt!DbgLoadImageSymbols 处插入“离开”的指示。在此之后执行 go(F5) 会使机器处于挂起状态。
【问题讨论】:
-
你试过
malloc(nameLength * sizeof(TCHAR))吗? -
你的 sizeof 太多了。应该是
malloc( nameLength * sizeof(TCHAR) ) -
此外,立即将其他内容分配给
name是没有意义的,从 malloc 中丢弃您刚刚用于的指针。 -
Codor 我不相信这是真的,至少在 C 中不是。
-
应该是
malloc( (nameLength+1) * sizeof(TCHAR) )为终结者留出空间。