C ++ CreateThread () Ошибка аргумента LPSTR Windows 7 (64)

Я пытаюсь создать простую программу, используя функцию CreateThread (). Мне нужно пройти LPSTR аргумент новой функции потока внутри структуры pDataArray, Я следую примеру MSDN ( MSDN CreateThread () Пример ).

typedef struct MyData {
LPSTR val1;
int val2;
} MYDATA, *PMYDATA;

Основная функция (CreateNewThread) получает LPSTR command переменная с примером текста «всем привет» из другой функции и работает правильно, и он корректно вводится в структуру, но когда я пытаюсь отправить его в многопоточную функцию (MyThreadFunction), он возвращает много странных символов, дамп памяти, который я предлагаю:

DEBUG: Inside CreateThread string: hi all
DEBUG: Before send to function: hi all
DEBUG: Inside MyThreadFunction data: ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠☻☻☻☻WinSock 2.0

Код функции CreateThread:

int CreateNewThread(LPSTR command, int numThread)
{
printf("\nDEBUG: Inside CreateThread string: %s\n",command);
PMYDATA pDataArray[MAX_THREADS];
DWORD   dwThreadIdArray[MAX_THREADS];
HANDLE  hThreadArray[MAX_THREADS];

// Allocate memory for thread data.

pDataArray[numThread] = (PMYDATA) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(MYDATA));

if( pDataArray[numThread] == NULL )
{
ExitProcess(2);
}

// Generate unique data for each thread to work with.

pDataArray[numThread]->val1 = command;
pDataArray[numThread]->val2 = 100;

printf("\nDEBUG: Before send to function: %s\n",pDataArray[numThread]->val1);

// Create the thread to begin execution on its own.

hThreadArray[numThread] = CreateThread(
NULL,                           // default security attributes
0,                              // use default stack size
MyThreadFunction,               // thread function name
pDataArray[numThread],          // argument to thread function
0,                              // use default creation flags
&dwThreadIdArray[numThread]);   // returns the thread identifierif (hThreadArray[numThread] == NULL)
{
ErrorHandler(TEXT("CreateThread"));
ExitProcess(3);
}
return 0;
}

И код MyThreadFunction ():

DWORD WINAPI MyThreadFunction( LPVOID lpParam ){

PMYDATA pDataArray;
pDataArray = (PMYDATA)lpParam;
LPSTR data = pDataArray->val1;
printf("\nDEBUG: Inside MyThreadFunction data: %s\n",data);
return 1;

}

Может кто-нибудь сказать мне, как правильно отправить LPSTR переменная в резьбовую функцию?

Спасибо за совет.

0

Решение

Кажется, вы проходите временный LPSTR в CreateNewThread()Итак, к моменту исполнения MyThreadFunction() это уже удалено. Например, это может произойти, если вы сделаете что-то вроде этого:

CreateNewThread(std::string("hi all").c_str(), 0);

или вот так:

std::string f() { return "hi all"; }
CreateNewThread(f().c_str(), 0);
3

Другие решения