class DEMO {
...
};int main(){
int str = 2;
struct DEMO *array = (DEMO *) malloc ((str+1) * sizeof(DEMO));
array[0].x = 100;
array[1].x = 101;
....
free(DEMO)
}
Вот так работает стабильно!!!
а если память выделить так struct DEMO *array = (DEMO *) malloc ((str) * sizeof(DEMO));
то прога может просто вылететь без ошибки просто как буд то по exit(1);
> class DEMO {
> struct DEMO *array = (DEMO *) malloc ((str+1) * sizeof(DEMO));
> free(DEMO)Либо Си + struct DEMO + malloc + free, либо Cи++ + class DEMO + new DEMO[str] + delete. Или как-то так...
> то прога может просто вылететь без ошибки просто как буд то по exit(1);
>[оверквотинг удален]
> ...
> };
> int main(){
> int str = 2;
> struct DEMO *array = (DEMO *) malloc ((str+1) * sizeof(DEMO));
> array[0].x = 100;
> array[1].x = 101;
> ....
> free(DEMO)
> }А может free(array)
:)
> class DEMO {
> struct DEMO *array = (DEMO *) malloc ((str+1) * sizeof(DEMO));
> free(DEMO)Честно сказать, вы меня лично запутали. Можете дать ([u]copy&paste[/u]) полный код чтобы понять, хотя бы, чего вы добиваетесь этим?
P.S.: А ещё советую приноровиться к valgrind. ;)
>> class DEMO {
>> struct DEMO *array = (DEMO *) malloc ((str+1) * sizeof(DEMO));
>> free(DEMO)
> Честно сказать, вы меня лично запутали. Можете дать ([u]copy&paste[/u]) полный код чтобы
> понять, хотя бы, чего вы добиваетесь этим?
> P.S.: А ещё советую приноровиться к valgrind. ;)fd_set active_fd_set;
FD_ZERO (&active_fd_set);
FD_SET (server, &active_fd_set);
DWORD d_child;
HANDLE child;
int event = 0;
while(1)
{
if ((event = select (FD_SETSIZE, &active_fd_set, NULL, NULL, NULL)) < 0)
{
printf("Error select\n");
closesocket(server);
WSACleanup();
return -1;
}if ( event )
{
int client = accept(server,(struct sockaddr*)&from, &fromlen);
if ( client != INVALID_SOCKET )
{
child = CreateThread( NULL, 0, start_child_client, (void*) client, 0, &d_child);if (child == NULL)
{
printf("Error CreateThread\n");
shutdown (client, 2);
closesocket(client);
ExitProcess(3);
}CloseHandle(child);
}
}
}-------------------------------
DWORD WINAPI start_child_client( void * Param )
{
int remote_client = (int) Param;
int RsaKeySizeDefault=_key_rsa_size(PUBFILE);HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdOut,FOREGROUND_INTENSITY);
struct Server *Settings = (struct Server *) malloc(sizeof(struct Server));
zero_server_child_struct(Settings);if ( load_server_config_crypt("OPTIONS\\server.bio",Settings, RsaKeySizeDefault) > 1 )
{
struct Client *Info = (struct Client *) malloc(2 * sizeof(struct Client));
zero_client_child_struct(&Info[0]);
zero_client_child_struct(&Info[1]);
recv_client_packet(remote_client,RsaKeySizeDefault,&Info[0]);
analize_pacet_recv(remote_client,RsaKeySizeDefault,&Info[0],Settings);printf("- %s\n",Info[0].ClientLocalMashineName);
printf("- %s\n",Info[0].ClientLocalUserName);
printf("- %s\n",Info[0].ClientIpAddress);
printf("- %s\n",Info[0].ClientMaskAddress);
printf("- %s\n",Info[0].ClientGateAddress);
printf("- %s\n",Info[0].ClientMacAddress);
printf("- %s\n",Info[0].ClientVpnUserName);
printf("- %s\n",Info[0].ClientAdapterName);
printf("- %s\n",Info[0].ClientVpnPassworda);
printf("- %s\n",Info[0].ClientVpnPasswordb);
printf("- %i\n",Info[0].ClientEventId);
printf("%s\n", Settings->ServerVpnPassworda);
printf("%s\n", Settings->ServerVpnPasswordb);
printf("%s\n", Settings->ServerVpnUserName);
printf("%i\n", Settings->ServerEventId);free(Info);
}
free(Settings);shutdown (remote_client, 2);
closesocket(remote_client);
return 0;
}int _read_client_crypt_data(int remote_client,int RsaKeySizeDefault,unsigned char *out_data,int type,unsigned char * key, unsigned char * iv, int seconds)
{
int n = 0,c = 0;
unsigned char *cryptText;
cryptText =(unsigned char *) malloc(RsaKeySizeDefault*2);
if ( cryptText == NULL ) { insert_log_error("Error -- malloc ",0); return 0; }
memset(cryptText,0,RsaKeySizeDefault*2);char ch;
while ( (c = xrecv(remote_client, &ch, 1, seconds)) != SOCKET_ERROR)
{
n+=c;
cryptText[n-1]=ch;
if ( n == RsaKeySizeDefault || n == 0 || c == 0) { c=0; break; }
}
if ( n == SOCKET_ERROR ) { insert_log_error("Error recv packet size -1",0); free(cryptText); return 0; }
if ( n == RsaKeySizeDefault )
{
if (( n = decrypt_init_all(cryptText, out_data, RsaKeySizeDefault, type, key, iv, n)) == 0 )
{
insert_log_error("Error decript",0);
memset(out_data,0,strlen((char*)out_data));
free(cryptText);
return 0;
}
}else{
insert_log_error("Error decript recv size != key",0); n = 0;
}
free(cryptText);
return n;
}
Вотана чо Михалыч.> struct Client *Info = (struct Client *) malloc(2 * sizeof(struct Client));
> zero_client_child_struct(&Info[0]);
> zero_client_child_struct(&Info[1]);Я бы связанным списком попробовал...
struct Client {
...
...
...
struct Client *next;
};typedef struct Client client_t;
int start_child_client(void) {
int i, str = 2;
client_t *Info, *Step;
...Step = NULL;
for (i = 0; i < str; i++) {
Info = (client_t *) malloc(sizeof (client_t));
Info->next = Step;
Step = Info;
}
Info = Step;while (curr) {
printf("- %s\n", curr->ClientLocalMashineName);
printf("- %s\n", curr->ClientLocalUserName);
printf("- %s\n", curr->ClientIpAddress);
printf("- %s\n", curr->ClientMaskAddress);
printf("- %s\n", curr->ClientGateAddress);
printf("- %s\n", curr->ClientMacAddress);
printf("- %s\n", curr->ClientVpnUserName);
printf("- %s\n", curr->ClientAdapterName);
printf("- %s\n", curr->ClientVpnPassworda);
printf("- %s\n", curr->ClientVpnPasswordb);
printf("- %i\n", curr->ClientEventId);curr = curr->next;
}