• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 149
  • Last Modified:

Dynamically allocate memory

Hi Guys.

I'm not a C++ developer and with this project I'm doing I was forced to use C++. The problem is that when I run my app and try to open a service its says Access violation reading location 0x00000000. The pointer is
lphService

Open in new window

I've looked around on how to allocate memory but I don't seem to understand as to how could I assign this as the size will be returned by a function and I don't know the size by head. Any help?
0
Mlungisi Ndlela
Asked:
Mlungisi Ndlela
  • 5
  • 4
1 Solution
 
ZoppoCommented:
Hi MCSI Developers,

in general the error occurs in case a NULL-pointer is dereferenced, in your case the program tries to access (read) the value where the pointer lphService points to.

We need more info about this to help you, could you post some code (especially all parts where the lphService is instanced and used)?

Best regards,

ZOPPO
0
 
Mlungisi NdlelaFounder of MCSIDevelopers also a software developerAuthor Commented:
@ZOPPO, here is the code, and I get error -26.

    LPHSERVICE lphService;
    lphService = 0; // I put 0 because the EXIT_SUCCESS is also 0
    HRESULT hResult;
    WFSVERSION SvcVersion, SpiVersion;
    char szLogicalName[]="Epson1200";
    hResult = (WFSOpen(szLogicalName,WFS_DEFAULT_HAPP,"Epson Print",WFS_TRACE_NONE,TWO_MINUTES,RECOGNISED_VERSIONS,&SvcVersion,&SpiVersion,lphService));
    if(hResult == WFS_ERR_CANCELED)
    {
    cout << WFS_ERR_CANCELED << endl; // This returns -4
    }else if(hResult == WFS_ERR_SERVICE_NOT_FOUND)
    {
    cout << WFS_ERR_SERVICE_NOT_FOUND << endl; // This is -43
    }else if(hResult == WFS_ERR_CONNECTION_LOST)
    {
    cout << WFS_ERR_CONNECTION_LOST << endl; // -54
    }else if(hResult == WFS_ERR_INTERNAL_ERROR)
    {
    cout << WFS_ERR_INTERNAL_ERROR << endl; // -15
    }else if(hResult == WFS_ERR_INVALID_APP_HANDLE)
    {
    cout << WFS_ERR_INVALID_APP_HANDLE << endl; // -17
    }else if(hResult == WFS_ERR_INVALID_POINTER)
    {
    cout << WFS_ERR_INVALID_POINTER << endl; // This is the error I get which is -26
    }

Open in new window

0
 
ZoppoCommented:
ok, I guess the LPHSERVICE is a typedef to a HSERVICE pointer, so you should be able to solve it using one of these methods:

1. Use a pointer: change line 2 to
lphService = new HSERVICE;

Open in new window

and add this line after the last use of lphservice:
delete lphservice;

Open in new window


2. Use an instance: change line 1 to
HSERVICE hService;

Open in new window

delete line 2 and replace lphService by &hService in line 6.

In both cases the pointer passed to WSFOpen points to a valid instance, with 1. this instance is created in heap (and therefor has to be released after last use), with 2. the instance is put onto the stack, thus released automatically when the function terminates.

Hope this helps,

ZOPPO
0
Cloud Class® Course: Microsoft Azure 2017

Azure has a changed a lot since it was originally introduce by adding new services and features. Do you know everything you need to about Azure? This course will teach you about the Azure App Service, monitoring and application insights, DevOps, and Team Services.

 
ZoppoCommented:
BTW, in addition two hints:

1. you don't need the ( and ) surrounding the WSFOpen call
2. using a chain of if/else to check a variable against constant values is not optimal for performance, in your case a switch/case statement would perform better.

ZOPPO
0
 
Mlungisi NdlelaFounder of MCSIDevelopers also a software developerAuthor Commented:
Thanks thats really helped, now I get this error: WFS_ERR_SERVICE_NOT_FOUND. Is this because of missing device or the name is not found on the registry?
0
 
ZoppoCommented:
Hm - sorry, that's hard to say for me since I don't know the API you're using - you could try if the program acts different when you dis- and re-connect the device, if so I would guess it's a problem with an unregistered (in registry) service.
0
 
Mlungisi NdlelaFounder of MCSIDevelopers also a software developerAuthor Commented:
I would guess it's a problem with an unregistered (in registry) service
do you mean my App is not registered or the device/service?
0
 
ZoppoCommented:
I would guess the service is unregistered or it is registered but not running.
1
 
Mlungisi NdlelaFounder of MCSIDevelopers also a software developerAuthor Commented:
Thanks,
registered but not running
that does make seance.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: Microsoft Office 2010

This course will introduce you to the interfaces and features of Microsoft Office 2010 Word, Excel, PowerPoint, Outlook, and Access. You will learn about the features that are shared between all products in the Office suite, as well as the new features that are product specific.

  • 5
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now