Pointer to pointers


 
Thread Tools Search this Thread
Top Forums Programming Pointer to pointers
# 1  
Old 11-09-2011
Pointer to pointers

Hi guys, I'm trying to understand pointers in C and made a simple example and I've problems with It.
Can someone help?

Code:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

int f1(char **str_);

int main(int argc, char **argv)
{
    char *str = NULL;

    f1(&str);     
    printf("str : %s\n", *str);

    str = realloc(str, (size_t) 0);   
    assert(str == NULL);

    return 0;
}

int f1(char **str_)
{
    if ((*str_ = realloc(*str_, sizeof(char) * 12)) == NULL)
    {
        fprintf(stderr,"realloc() failed\n");
        exit(3);
    }

    (*str_) = "hello there";

    return 0;
}

Thanks in advance.
# 2  
Old 11-09-2011
Two problems.

First, %s in a printf() format string causes printf() to expect a pointer to a string, so you want to pass str and not what it's pointing to (not *str).

Secondly, you need to copy the constant string to the buffer you allocated. Unlike scripting languages, you cannot use an assignment to cause the buffer to be filled
Code:
 strcpy( *str_, "hello there" );

This User Gave Thanks to agama For This Post:
# 3  
Old 11-09-2011
Thank you @agama! You helped a lot and I learned something.
Thank you @agama!
# 4  
Old 11-10-2011
The real problem is that when you say "*str = "hello there"" what you're telling the compiler is to set the value of the memory location pointed to by str to the address of the string "hello there" which resides inside the program's data segment. Because "hello there" is a static string in the program, it must exist in the data segment. Since it's not a heap address, it can not be reallocated via realloc, so it fails when you call realloc.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Pointers and array

Hello, I read from a book exercise for a challenge. How to print out each letter of char array a by two different pointers pa and ppa in the example? I have tried my code for letter "r" by testing without full understanding as only the first one worked. #include<stdio.h> int main() { char... (17 Replies)
Discussion started by: yifangt
17 Replies

2. Programming

Problem With Pointers

Hi guys. What is the difference between these: 1. int *a; 2. int (*a); (2 Replies)
Discussion started by: majid.merkava
2 Replies

3. Programming

Need help with the Pointers in C

I have a special character called ô. When it is declared as a character variable its showing it can be printed. But when it is declared as a character pointer variable its showing it cannot be printed. I am just wondering why its happening like this.. c1 = '@'; c2 = 'ô'; char *fp; fp="XXô"; if... (1 Reply)
Discussion started by: sivakumar.rj
1 Replies

4. UNIX for Advanced & Expert Users

shared pointers

I am new to shared pointer conceot in C++ and hence require some clarification: For example: class A { public: virtual ~A() { } int x; }; typedef boost::shared_ptr<A>... (1 Reply)
Discussion started by: uunniixx
1 Replies

5. 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

6. Programming

Pointer to a struct (with pointers) *** glibc detected *** double free

I am using a structure defined as follows struct gene_square { double *x; double *y; };I have class, with a member function which is a pointer of this type: gene_square* m_Genes;I am allocating memory in the constructors like this: m_Genes = new gene_square; for (ii=0;... (1 Reply)
Discussion started by: jatoo
1 Replies

7. Programming

pointers

Hi I mash with pointers in C. I solve this problem about 5 hours and I don't know how I should continue. void InsertFirst (tList *L, int val) { tElemPtr new; if((new = malloc(sizeof(tElemPtr))) == NULL) Error(); new->data = val; new->ptr = L->frst; L->frst = new;... (2 Replies)
Discussion started by: Milla
2 Replies

8. Programming

pointers

is this a valid c declaration int (*ptr(int *b)); plz explain... (4 Replies)
Discussion started by: areef4u
4 Replies

9. Shell Programming and Scripting

functiom pointers

Hi all i wonder about function pointers as i never used them in my C code . could any tell me why and where exactly function pointers come into picture . thanq (1 Reply)
Discussion started by: Raom
1 Replies

10. Programming

Regarding Function and Pointers.

HI, Here is some thing that is puzzling me from a long time. Can some body explain me this with example. The question is :- What is the difference between function pointer and pointer to a function. Where do we actually use the function pointers and pointer to functions. Thanks in... (0 Replies)
Discussion started by: S.Vishwanath
0 Replies
Login or Register to Ask a Question