如何删除 Visual studio 中的调试断言错误
How to remove the Debug Assertion Error in Visual studio
我有一个程序可以读取目录中的文件名。 CodeBlocks IDE 中的代码 运行s 但当我在 Visual Studio.
中 运行 时同样给了我调试断言错误
我在 预处理器属性 中添加了 _CRT_SECURE_NO_WARNINGS 因为没有它 strerror() 给我一个错误。
#include <windows.h>
#include <stdio.h>
void listdirs(wchar_t *dir, wchar_t *mask)
{
wchar_t *fspec1 = { L'[=11=]' }, *fname = { L'[=11=]' };
WIN32_FIND_DATA dta;
HANDLE hDta;
DWORD dLastError;
LPCWSTR fspec = reinterpret_cast<LPCWSTR>(fspec1);
char *buff = { '[=11=]' };
swprintf(fspec1, 100, L"%s/%s", dir, mask);
if ((hDta = FindFirstFile(fspec, &dta)) == INVALID_HANDLE_VALUE) {
dLastError = GetLastError();
printf("The error : %s\n", strerror(dLastError));
}
else {
do {
if (!(dta.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
printf("%ws\n", dta.cFileName);
}
else
{
if (wcscmp(dta.cFileName,L".") !=0 && wcscmp(dta.cFileName,L"..")!=0)
{
swprintf(fname, 100, L"%s", dta.cFileName);
listdirs(fname, mask);
}
}
} while (FindNextFile(hDta, &dta));
FindClose(hDta);
}
}
int main (int argc, char *argv[])
{
listdirs(L"C:\windows\system32\Tasks", L"\.*");
return 0;
}
如果无法访问文件夹或打印文件名,输出应该打印一条错误消息。在任何一种情况下,我只会收到调试断言错误。
有了定义
wchar_t *fspec1 = { L'[=10=]' }, *fname = { L'[=10=]' };
你说fspec1
和fname
都是指针,指向NULL
。尝试以任何方式取消引用这些指针将导致 undefined behavior.
并且您取消引用这些指针,甚至尝试写入这些空指针指向的位置。例如
swprintf(fspec1, 100, L"%s/%s", dir, mask);
您需要为这些指针实际指向分配内存。或者将它们定义为适当大小的数组:
wchar_t fspec1[100], fname[100];
我有一个程序可以读取目录中的文件名。 CodeBlocks IDE 中的代码 运行s 但当我在 Visual Studio.
中 运行 时同样给了我调试断言错误我在 预处理器属性 中添加了 _CRT_SECURE_NO_WARNINGS 因为没有它 strerror() 给我一个错误。
#include <windows.h>
#include <stdio.h>
void listdirs(wchar_t *dir, wchar_t *mask)
{
wchar_t *fspec1 = { L'[=11=]' }, *fname = { L'[=11=]' };
WIN32_FIND_DATA dta;
HANDLE hDta;
DWORD dLastError;
LPCWSTR fspec = reinterpret_cast<LPCWSTR>(fspec1);
char *buff = { '[=11=]' };
swprintf(fspec1, 100, L"%s/%s", dir, mask);
if ((hDta = FindFirstFile(fspec, &dta)) == INVALID_HANDLE_VALUE) {
dLastError = GetLastError();
printf("The error : %s\n", strerror(dLastError));
}
else {
do {
if (!(dta.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
printf("%ws\n", dta.cFileName);
}
else
{
if (wcscmp(dta.cFileName,L".") !=0 && wcscmp(dta.cFileName,L"..")!=0)
{
swprintf(fname, 100, L"%s", dta.cFileName);
listdirs(fname, mask);
}
}
} while (FindNextFile(hDta, &dta));
FindClose(hDta);
}
}
int main (int argc, char *argv[])
{
listdirs(L"C:\windows\system32\Tasks", L"\.*");
return 0;
}
如果无法访问文件夹或打印文件名,输出应该打印一条错误消息。在任何一种情况下,我只会收到调试断言错误。
有了定义
wchar_t *fspec1 = { L'[=10=]' }, *fname = { L'[=10=]' };
你说fspec1
和fname
都是指针,指向NULL
。尝试以任何方式取消引用这些指针将导致 undefined behavior.
并且您取消引用这些指针,甚至尝试写入这些空指针指向的位置。例如
swprintf(fspec1, 100, L"%s/%s", dir, mask);
您需要为这些指针实际指向分配内存。或者将它们定义为适当大小的数组:
wchar_t fspec1[100], fname[100];