2011-07-26 53 views
0

我可以設置在棧上很容易的結構:如何動態分配一個結構,它的TCHAR成員數組與calloc?

struct sArray 
{ 
TCHAR sName[512]; 
}; 
struct sArray sKeys[2048] = {0}; 

但是使用太多的堆棧空間。

相反,我希望把它全部上堆,所以我想出了這個:

struct sArray 
{ 
    TCHAR *sName; 
}; 
struct sArray *sKeys = (sArray *) calloc(2048, sizeof(sArray)); 

如何動態地爲SNAME分配內存?我試過這個,它不能編譯:

TCHAR *sKeys[0].sName = (TCHAR *) calloc(512,sizeof(TCHAR)); 

我真的在這裏忽略了一些東西。有人可以幫忙嗎?謝謝。

+0

我想這: \t'struct sAr ray \t { \t \t TCHAR * sName; \t //動態大小 \t} * sKeys [2048]; (DWORD i = 0; i <2048; i ++)\t \t \t ' 我應該對1進行calloc嗎? – JeffR

回答

0

只需使用

sKeys[0].sName = (TCHAR *) calloc(512,sizeof(TCHAR)); 

(無TCHAR *前)

+0

運行時檢查失敗#3 - 正在使用變量'sKeys'而未被初始化。 – JeffR

+0

你拿出calloc嗎?如果你執行初始'struct sArray * sKeys =(sArray *)calloc(2048,sizeof(sArray));',你不應該得到運行時錯誤。順便說一句,我假設語言是C?是對的嗎? '因爲如果它是C++的話,那麼你就會犯這個錯誤,並且應該使用'new'。 –

+0

是的,我錯誤地拿出了calloc。它是C++,那麼我如何使用'new'? – JeffR

0

試試這個:

#include <stdlib.h> 
#include <string.h> 
#include <tchar.h> 
#include <windows.h> 
#include <iostream> 
#include <conio.h> 
#include <stdio.h> 
#include <sys/types.h> 
#include <signal.h> 
#include <unistd.h> 
#include <Psapi.h> 
#include <strsafe.h> 
#include <cstring> 

typedef struct MyData { 
    TCHAR processPath[ 32 ]; 
} MYDATA, *PMYDATA; 

int main() 
{ 
    PMYDATA pData = (PMYDATA) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MYDATA)); 
    strcpy(pData->processPath, TEXT ("C:\\Windows\\System32\\notepad.exe")); 
} 

我用這個命令編譯:

"C:\MinGW64\bin\g++.exe" -o ThreadExample.exe ThreadExample.cpp -lpsapi