English 中文(简体)
Progress 4GL that calls a C function
原标题:

I have been working in some C language function that is going to be called from a Progress 4GL application and I found myself with the following doubts:

The C function uses malloc to dynamically allocate an array of chars and the idea is that the pointer that allocates that memory will be returned to the Progress 4GL process which originally sent a MEMPTR data type to hold the result of the C method.

Basically the MEMPTR from Progress must be sent to the C function to "receive" the C generated array and use it when scope returns to it from de C function (a pass by reference between both languages where the C method "fills" the MEMPTR progress variable).

My questions is:

When the Progress process finishes and the MEMPTR variable is "freed", does it free the malloc allocated memory in the C function as well?

and

If I free the malloc allocated memory in the C function I m guessing the Progress process will receive garbage data, Is this correct?

Thanks for your time and help.

Greetings.

最佳回答

4GL/ABL: How to Call WIN32 API Function: GetLongPathName

Progress 4GL doesn t manage that memory for you. You need to provide a method to deallocate/free that memory.

Yes, if you ever access free() d memory, access to it becomes undefined - it may crash, it may give you garbage data, or your program could continue chugging away without error.

Disclaimer: I work for Progress.

问题回答

Generally in any cross-language programming environment, it is a Bad Idea to have or expect one language to deallocate memory allocated by the other. The language that allocates resources (like memory) should have a corresponding call to deallocate it when the client is done with them.

C in particular does not have garbage collection, so any memory allocated by it must be manually deallocated.

There is one exception. On most (non-embedded) platforms, all allocated resources will be reclaimed when the application terminates. So if the allocation is a one-time startup only type thing (rather than being done in a loop or something), then it is generally OK to just let the OS reclaim it when the program exits, rather than worrying about doing it manually.





相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签