调试断言失败:_CrtIsValidHeapPointer(pUserData)C++; 我是C++初学者,我尝试编写一个程序,它随机地从我最喜欢的连续剧中随机生成一个片段,或者绝对随机,但是当我调试它时,这个错误总是出现。

调试断言失败:_CrtIsValidHeapPointer(pUserData)C++; 我是C++初学者,我尝试编写一个程序,它随机地从我最喜欢的连续剧中随机生成一个片段,或者绝对随机,但是当我调试它时,这个错误总是出现。,c++,debugging,random,assertion,C++,Debugging,Random,Assertion,代码还可以,如果它不在Win32 Form应用程序中,它就可以工作 你能帮帮我吗 列表项的我的代码: Void pro::Form1::keres(string sori) { int k=0; vector<string> a; srand (time(NULL)); string desti = "d:\\Filmek\\Sorozatok\\" + sori + "\\*"; WIN32_FIND_DATA search_data; int s; memset(&

代码还可以,如果它不在Win32 Form应用程序中,它就可以工作

你能帮帮我吗

列表项的我的代码:

Void pro::Form1::keres(string sori) {


int k=0;
vector<string> a;
srand (time(NULL));
string desti = "d:\\Filmek\\Sorozatok\\" + sori + "\\*";
WIN32_FIND_DATA search_data;
int s;

memset(&search_data, 0, sizeof(WIN32_FIND_DATA));
HANDLE handle = FindFirstFile(desti.c_str(), &search_data);

while(handle != INVALID_HANDLE_VALUE)
{
    a.push_back(search_data.cFileName);
    k++;
    if(FindNextFile(handle, &search_data) == FALSE)
        break;
}

s = rand() % (k-2);
cout<<a[s+2]<<endl;
desti = "d:\\Filmek\\Sorozatok\\" + sori + "\\" + a[s+2] + "\\*";
handle = FindFirstFile(desti.c_str(), &search_data);
k = 0;

while(handle != INVALID_HANDLE_VALUE)
{
    a.push_back(search_data.cFileName);
    k++;
    if(FindNextFile(handle, &search_data) == FALSE)
        break;
}
s = rand() % (k-2);
string run = "cd " + desti + " & start " + a[s+2];
system(run.c_str());
a.clear();
}

Void pro::Form1::kereses(string film) {

int q=0;
int w=0;
int e=0;

int a;
int s;
int d;

vector<string> y;
vector<string> x;
vector<string> v;
srand (time(NULL));

string desti = "d:\\Filmek\\" + film + "\\*";
WIN32_FIND_DATA search_data;

memset(&search_data, 0, sizeof(WIN32_FIND_DATA));
HANDLE handle = FindFirstFile(desti.c_str(), &search_data);

while(handle != INVALID_HANDLE_VALUE)
{
    y.push_back(search_data.cFileName);
    q++;
    if(FindNextFile(handle, &search_data) == FALSE)
        break;
}

a = rand() % (q-2);
desti = "d:\\Filmek\\" + film +"\\" + y[a+2] + "\\*";
handle = FindFirstFile(desti.c_str(), &search_data);
y.clear();
q = 0;

while(handle != INVALID_HANDLE_VALUE)
{
    x.push_back(search_data.cFileName);
    w++;
    if(FindNextFile(handle, &search_data) == FALSE)
        break;
}

s = rand() % (w-2);
desti = "d:\\Filmek\\" + film +"\\" + y[a+2] + "\\" + x[s+2] + "\\*";
handle = FindFirstFile(desti.c_str(), &search_data);
x.clear();
w = 0;

while(handle != INVALID_HANDLE_VALUE)
{
    v.push_back(search_data.cFileName);
    e++;
    if(FindNextFile(handle, &search_data) == FALSE)
        break;
}
d = rand() % (e-2);
string run = "cd " + desti + " & start " + v[d+2];
system(run.c_str());
v.clear();
e=0;

}
Void pro::Form1::keres(字符串sori){
int k=0;
载体a;
srand(时间(空));
字符串desti=“d:\\Filmek\\Sorozatok\\”+sori+“\\*”;
WIN32查找数据搜索数据;
int-s;
memset(&search_data,0,sizeof(WIN32_FIND_data));
HANDLE HANDLE=FindFirstFile(desti.c_str(),&search_data);
while(句柄!=无效的句柄值)
{
a、 向后推(search\u data.cFileName);
k++;
if(FindNextFile(handle,&search_data)==FALSE)
打破
}
s=rand()%(k-2);

coutFyi,你试图跳过父别名和自别名的逻辑太可怕了。利用
WIN32\u FIND\u DATA
dwFileAttributes
成员,有选择地只将文件名、目录或任何筛选内容下推到容器中..并用关闭搜索句柄,而不是将它们泄漏到以太中。Sorry、 但我对编程非常业余,你能一步一步地写下来吗?