2011-07-26 2 views
0

je peux configurer une structure assez facile sur la pile:Comment allouer dynamiquement une structure et son tableau de membres TCHAR avec calloc?

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

Mais cela utilise beaucoup trop de l'espace de pile.

Au lieu de cela, je veux mettre tout sur le tas, donc je suis venu avec ceci:

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

Comment allouer dynamiquement la mémoire pour le sName? J'ai essayé ceci et il ne compile pas:

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

Je suis vraiment en train de négliger quelque chose ici. Quelqu'un peut-il aider? Merci.

+0

J'ai essayé : \t 'struct sAr rayon \t { \t \t TCHAR * sNom; \t // Taille dynamique \t} * sKeys [2048]; \t \t pour (DWORD i = 0; i <2048; i ++) \t \t sKeys [i] = (sArray *) calloc (1, sizeof (sArray)); \t ' Dois-je faire le calloc à 1? – JeffR

Répondre

0

Il suffit d'utiliser

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

(Pas TCHAR * en face)

+0

Échec de vérification d'exécution # 3 - La variable 'sKeys' est utilisée sans être initialisée. – JeffR

+0

Avez-vous sorti le calloc? Si vous faites l'initiale 'struct sArray * sKeys = (sArray *) calloc (2048, sizeof (sArray));', vous ne devriez pas avoir une erreur d'exécution. BTW, je suppose que la langue est C? Est-ce correct? 'cos si c'est du C++, vous vous trompez, et vous devriez utiliser 'new'. –

+0

Oui, j'ai pris par erreur Calloc. C'est C++, alors comment utiliser le 'new'? – JeffR

0

Essayez ceci:

#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")); 
} 

J'ai utilisé cette commande pour compiler:

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