Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 21942

Prawdopodobnie niewłaściwa alokacja pamęci.

$
0
0

Cześć napisałem sobie program (wraz z pomocą dokumentacji z mdsn), który ma dodawac wpis do tablicy arp. 

Generalnie działa ok, (tylko z uprawnieniami administratora :( ), jednakże, mam problem ze zrozumieniem kawałka kodu. Poniżej dodaje całość. Zaznaczony fragment zaczyna się od start, a kończy na stop. Jeżeli wywalę tamta cześć kodu i dodam zamiast tego

GetIpAddrTable(pIpAddrtable, &dwSize, 0)

GetIpAddrTable(pIpAddrtable, &dwSize, 0) t

o program działa, aczkolwiek jestem pewny, że coś jest nie tak. Mógłby ktoś wyjaśnić o co to chodzi?

 

 


    
    #ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif


#include <windows.h>
#include <winsock2.h>
#include <ws2ipdef.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
using namespace std;


int main()
{
ULONG ulOutBufLen;
DWORD dwRetVal;

PIP_ADAPTER_INFO pAdapterInfo;

ulOutBufLen = sizeof(IP_ADAPTER_INFO);

pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
ulOutBufLen = sizeof(IP_ADAPTER_INFO);

if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) {
    free (pAdapterInfo);
    pAdapterInfo = (IP_ADAPTER_INFO *) malloc ( ulOutBufLen );
}

if ((dwRetVal = GetAdaptersInfo( pAdapterInfo, &ulOutBufLen)) != ERROR_SUCCESS) {
    printf("GetAdaptersInfo call failed with %d\n", dwRetVal);
}


PMIB_IPADDRTABLE pIpAddrtable;
DWORD dwSize = 0;
DWORD dwRetVal2 = 0;
IN_ADDR IPAddr;


free(pIpAddrtable);
pIpAddrtable = (MIB_IPADDRTABLE *) malloc(dwSize*2);




PIP_ADAPTER_INFO pAdapter = pAdapterInfo;

PMIB_IPNETROW pArpEntry;

DWORD ip = inet_addr("182.221.231.1");



//start
if (pIpAddrtable)
{
    if (GetIpAddrTable(pIpAddrtable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER)
    {
        free(pIpAddrtable);
        cout <<"Za mała ilosc pamięci";
    }

    if (pIpAddrtable == NULL) {
            printf("Memory allocation failed for GetIpAddrTable\n");
            exit(1);
        }

    if (dwRetVal2 = GetIpAddrTable(pIpAddrtable, &dwSize, 0) != NO_ERROR)
    {
        printf("Mamy error %s", dwRetVal2);
    }
}
//stop



pArpEntry->dwIndex = pIpAddrtable->table[0].dwIndex;
pArpEntry->dwPhysAddrLen = 6;
pArpEntry->bPhysAddr[0] = '0x01';
pArpEntry->bPhysAddr[1] = '0xb2';
pArpEntry->bPhysAddr[2] = '0xd3';
pArpEntry->bPhysAddr[3] = '0xd4';
pArpEntry->bPhysAddr[4] = '0x05';
pArpEntry->bPhysAddr[5] = '0x16';
pArpEntry->dwType = MIB_IPNET_TYPE_STATIC;
pArpEntry->dwAddr = ip;

if (CreateIpNetEntry(pArpEntry) == ERROR_ACCESS_DENIED)
{
    cout <<"Dostęp zabroniony ";
}
while (pAdapter)
{
    printf(TEXT("Nazwa adaptera: %s \n"), pAdapter->AdapterName);
    printf("Adres adaptera: %s \n", pAdapter->IpAddressList.IpAddress.String);
    printf("Maska: %s \n ", pAdapter->IpAddressList.IpMask.String);
    printf("Opis:  %s \n ", pAdapter->Description);
    printf("Serwer DHCP %s \n ", pAdapter->DhcpServer.IpAddress.String);
    printf("Indeks: %5d \n ", pAdapter->Index);

    cout <<endl;
    pAdapter = pAdapter->Next;
}




    return 0;
}

 


Viewing all articles
Browse latest Browse all 21942

Trending Articles


TRX Antek AVT - 2310 ver 2,0


Автовишка HAULOTTE HA 16 SPX


POTANIACZ


Zrób Sam - rocznik 1985 [PDF] [PL]


Maxgear opinie


BMW E61 2.5d błąd 43E2 - klapa gasząca a DPF


Eveline ➤ Matowe pomadki Velvet Matt Lipstick 500, 506, 5007


Auta / Cars (2006) PLDUB.BRRip.480p.XviD.AC3-LTN / DUBBING PL


Peugeot 508 problem z elektroniką


AŚ Jelenia Góra