Sponsored Content
Top Forums Programming Problem with function which reutrns pointer to a value Post 87845 by mbb on Friday 28th of October 2005 10:03:00 AM
Old 10-28-2005
Your other post implies you may be passing back a string.

You may prefer to use strcpy like so:

char CountryName[XX*];

strcpy(CountryName, pcCityIdToCountryName(..................) );

*where XX is the size of the string.

The reason being is that you don't know if the char pointer being passed back is still pointing to an allocated memory block. Sometimes I have seen functions pass back a pointer to a local variable or memory being allocated and then made free. It just so happens that you are pointing to a memory location that still has a string (null terminated) value. This may not be the case later on in the program's execution, especially when you are allocating and freeing memory frequently, and you may encounter a memory violation.

At least by copying string into a local variable you can protect against any future problems.

Of course, if it is your own function, you can make your own judgements as to the best way to call it, based on your overall design.
 

10 More Discussions You Might Find Interesting

1. Programming

pointer problem

could any one tell why the following is showing segmentation fault while using **ptr but working fine using **a #include<stdio.h> ... (1 Reply)
Discussion started by: useless79
1 Replies

2. Programming

How to return void function pointer

Hello all im trying to build function that will return void function pointer what is mean is ( not working ) the main function void * myClass::getFunction(int type){ if(type==1) return &myClass::Test1; if(type==2) return &myClass::Test2; } void myClass::Test1(){... (1 Reply)
Discussion started by: umen
1 Replies

3. Programming

pass a pointer-to-pointer, or return a pointer?

If one wants to get a start address of a array or a string or a block of memory via a function, there are at least two methods to achieve it: (1) one is to pass a pointer-to-pointer parameter, like: int my_malloc(int size, char **pmem) { *pmem=(char *)malloc(size); if(*pmem==NULL)... (11 Replies)
Discussion started by: aaronwong
11 Replies

4. Programming

Function pointer to inline function ?

Hi. Problem: I have to parse the payload of a packet. The payload could be in Big Endian Format (network byte order) or little. That depends on a flag present in the header of the packet. Solution: A horrible solution could be to check for that flag everytime I have to read a field in the... (11 Replies)
Discussion started by: emitrax
11 Replies

5. Programming

Function Returning Pointer

Hi guys. how a functions such fdopen, ... can return pointer? are these functions use static memory(variables)? (6 Replies)
Discussion started by: majid.merkava
6 Replies

6. Programming

structure pointer array as function parameters

if i create an array of pointers to a structure "struct node" as: struct node *r; and create "n" number of "linked lists" and assign it to the various struct pointers r using some function with a return type as structure pointer as: r=multiplty(.......) /*some parameters*/ is... (2 Replies)
Discussion started by: mscoder
2 Replies

7. Programming

Trivial doubt about C function pointer

Hi, In the below C code, #include <stdio.h> void print() { printf("Hello\n"); } int main() { void (*f)() = (void (*)()) print; f(); (*f)(); } I wonder, how the syntaxes "f()" and "(*f)()" are treated as same without any error? Is this an improvement or ANSI/ISO... (1 Reply)
Discussion started by: royalibrahim
1 Replies

8. Programming

pointer problem

Does anyone know? int x = 1; int *p = &++x; //ok ! int *q = &x++; //gives an error :O why the first pointer is ok but the second is an error? (13 Replies)
Discussion started by: nishrestha
13 Replies

9. Programming

Pure C function pointer on printing vowels twice

Have difficulty to understand this pure C code to only print vowels twice from input string. Questions are commented at the end of each place. #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <limits.h> /* *Demonstrate the use of dispatch tables */ /*Print a char... (11 Replies)
Discussion started by: yifangt
11 Replies

10. Programming

Segmentation fault when I pass a char pointer to a function in C.

I am passing a char* to the function "reverse" and when I execute it with gdb I get: Program received signal SIGSEGV, Segmentation fault. 0x000000000040083b in reverse (s=0x400b2b "hello") at pointersExample.c:72 72 *q = *p; Attached is the source code. I do not understand why... (9 Replies)
Discussion started by: jose_spain
9 Replies
XtMalloc(3)							   XT FUNCTIONS 						       XtMalloc(3)

NAME
XtMalloc, XtCalloc, XtRealloc, XtFree, XtNew, XtNewString - memory management functions SYNTAX
char *XtMalloc(Cardinal size); char *XtCalloc(Cardinal num, Cardinal size); char *XtRealloc(char *ptr, Cardinal num); void XtFree(char *ptr); type *XtNew(type); String XtNewString(String string); Cardinal XtAsprintf(String *new_string, const char *format, ...); ARGUMENTS
num Specifies the number of bytes or array elements. ptr Specifies a pointer to the old storage or to the block of storage that is to be freed. size Specifies the size of an array element (in bytes) or the number of bytes desired. string Specifies a previously declared string. type Specifies a previously declared data type. new_string Specifies a pointer to write a newly allocated string to. format Specifies a formatting string as defined by sprintf(3c) DESCRIPTION
The XtMalloc functions returns a pointer to a block of storage of at least the specified size bytes. If there is insufficient memory to allocate the new block, XtMalloc calls XtErrorMsg. The XtCalloc function allocates space for the specified number of array elements of the specified size and initializes the space to zero. If there is insufficient memory to allocate the new block, XtCalloc calls XtErrorMsg. The XtRealloc function changes the size of a block of storage (possibly moving it). Then, it copies the old contents (or as much as will fit) into the new block and frees the old block. If there is insufficient memory to allocate the new block, XtRealloc calls XtErrorMsg. If ptr is NULL, XtRealloc allocates the new storage without copying the old contents; that is, it simply calls XtMalloc. The XtFree function returns storage and allows it to be reused. If ptr is NULL, XtFree returns immediately. XtNew returns a pointer to the allocated storage. If there is insufficient memory to allocate the new block, XtNew calls XtErrorMsg. XtNew is a convenience macro that calls XtMalloc with the following arguments specified: ((type *) XtMalloc((unsigned) sizeof(type)) XtNewString returns a pointer to the allocated storage. If there is insufficient memory to allocate the new block, XtNewString calls XtEr- rorMsg. XtNewString is a convenience macro that calls XtMalloc with the following arguments specified: (strcpy(XtMalloc((unsigned) strlen(str) + 1), str)) The XtAsprintf function allocates space for a string large enough to hold the string specified by the sprintf(3c) format pattern when used with the remaining arguments, and fills it with the formatted results. The address of the allocated string is placed into the pointer passed as ret. The length of the string (not including the terminating null byte) is returned. If there is insufficient memory to allo- cate the new block, XtAsprintf calls XtErrorMsg. SEE ALSO
X Toolkit Intrinsics - C Language Interface Xlib - C Language X Interface X Version 11 libXt 1.1.3 XtMalloc(3)
All times are GMT -4. The time now is 08:20 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy