Tag: 腐败

检查硬盘上的坏扇区

最近几次停电后,我的计算机已经搞得很乱(BSODs时不时,整个操作系统表现得非常奇怪)。 现在我有一个程序在我的计算机搞砸之前运行得非常好。 该程序基本上使用CreateFile创建一个文件,并使用WriteFile写入它。 这个程序还有其他东西基于这个文件做他们的事情。 我注意到整个程序也表现得很奇怪。 我的调试结果: 我注意到在CreateFile之后,创建了应该存在的文件(使用资源管理器和命令行进行检查)。 WriteFile没有写入文件(再次使用资源管理器和命令行进行检查)。 在WriteFile之后,每当我在资源管理器中双击文件或对该文件做任何事情时,一切都表现得好像文件不存在。 所有API都返回了各自的成功代码。 绝对没有错误。 我停止了我的程序并退出了IDE之后,我去了explorer并试图删除包含上面创建的文件的文件夹,它向我展示了这个: 该文件已被删除。 注意:上述情况并非总是如此。 由于上面的调试,我得出的结论是,由于我的整个操作系统表现得很奇怪,我的程序也很奇怪。 我的计划没有错(因为在那些严重的停电之前一切都很完美)。 无论如何,微软有这个说错误 。 基本上我的硬盘有很多坏道。 我的问题:有没有办法以编程方式检查C中的硬盘驱动器是否正常? 该检测不需要100%正确。 但是,我确实希望这个检查非常快(因为我做了很多写等等)。 我想要这个检查,因为到目前为止,我的程序的其余部分认为文件已经准备就绪(因为没有返回错误)并且随后发生了各种奇怪的行为。 作为一个可能不知道他/她的硬盘被驱动的用户,我希望我的程序建议运行磁盘检查。

C中的双重自由或腐败3d数组

在释放3d数组时,我遇到了“双重释放或损坏”错误。 任何人都可以告诉我代码中的问题在哪里? arrays的大小为2 * N * N. 这里N的值是100.即使没有铸造,也是相同的结果。 这是代码: // Mallocing double ***h = malloc(2 * (sizeof(double**))); for(i = 0; i < N; i++) { h[i] = malloc(N * sizeof(double*)); for(j = 0; j < N; j++) { h[i][j] = malloc(N * sizeof(double)); } } // Freeing for(i = 0; i < N; i++) { […]

协助openssl blowfish简单示例插入垃圾字符

如果您有一个很好的例子,只需使用openssl加密文件,这比我遇到问题的文件更好,我将非常感激。 更新:作者Myabe是正确的。 在我没有分配的东西上使用memset让我想起strtok对非堆栈变量的窒息。 Update2:使用malloc使核心转储停止。 更新了代码。 控件Hs仍在出现。 更新代码以反映这一点。 Update3:示例中的循环结构显示不正确。 我不确定后续读取的发生方式是否大于初始读取的大小。 Update4:我想我找到了。 decrypt loop有一个olen + = tlen,缓冲区应丢弃该组位。 :( 不是。 Update99988:我已经放弃了所有的希望。 我想我需要抛弃这个例子,而是从Openssl书中开始。 在解密时,中间层缓冲区预先添加了^ H,但由于指针被传入,我开始怀疑对齐问题。 我想我可能在一个糟糕的例子开始的船上比从头开始更糟糕。 我不得不做一些更正(原件在下面的代码中注释)。 原作者在传递地址方面存在一些问题。 作者使用的1024和1032不同大小的缓冲区正在激发我的思想,但我认为它与8位种子和链式加密调用有关。 我在(控制Hs)中获取垃圾字符,并且像解密这样的核心转储正在破坏堆栈。 我对加密,openssl相当新,而且我并不熟悉gdb。 我已尽一切努力简化这一过程 gcc –version报告4.3.2 打开SUSE 11 compile.sh gcc -g -o blowfish blowfish.c -lcrypto run.sh ulimit -c unlimited ./blowfish example.txt encrypted_example decrypted_example echo diff example.txt decrypted_example diff example.txt decrypted_example clean.sh […]