what happen to memory assigned to a string addressed by a pointer when that pointer points to a new string?

pointer to string c
pointer to string in c
array of pointers to strings in c example
read string using pointer in c
string pointer array c++
how to pass string to a function in c using pointers
pointers and strings in c pdf
how to store multiple strings in an array in c
    char *p = "hello";
    p = "hello_2";

Here string "hello" was stored in memory and its address was present in pointer 'p' but when this pointer starts pointing to string "hello_2", what will happen to the memory where the string "hello" was stored? Will it be freed or this string remains there but we can't access it?

What you have is a string constant and it is stored in read-only memory. So this memory is not required to be freed explicitly using free()

Till the lifetime of the variable p is valid you can access the stored string.

6.9, Static memory allocation happens for static and global variables. For strings, it's easy: a string that starts with a \0 is clearly not being used. Without a pointer to hold the address of the memory that was just allocated, we'd have no First, try to avoid having multiple pointers point at the same piece of dynamic memory. A pointer is a variable that stores a memory address. Pointers are used to store the addresses of other variables or memory items. Pointers are very useful for another type of parameter passing, usually referred to as Pass By Address .

C - Pointers and Strings - C Programming, In this tutorial we will learn to store strings using pointers in C programming language. of the first element of the array i.e., it points at the starting memory address. The pointer variable ptr is allocated memory address 8000 and it holds the array of pointers char *cityPtr[4] = { "Chennai", "Kolkata", "Mumbai", "​New Delhi" };  Note: Since we assigned the pointer the address of an array of characters, the pointer must be a character pointer--the types must match. Also, to assign the address of an array to a pointer, we do not use the address-of ( & ) operator since the name of an array (like label ) behaves like the address of that array in this context.

You are actually creating a string literal named "hello" allocating it somewhere in the memory , and assigning the address of first character of the literal to the pointer p, and as the pointer is not constant you can assign it again with different addresses. And one more important point to note is that the string literal created are in read only memory.

A First Book of C++, Storage of a C-string using a pointer Figure 15.5 C-string storage allocation The the initial C-string remains in memory, and new storage locations are allocated to the address in message2 to point to the starting location of this new string. Select one: a) A pointer can be assigned the address of an array. b) An array can be assigned the value in a pointer variable. c) If a pointer points to an array, it can be used in place of the array name. d) If a pointer points to an array, the pointer does not know how many elements are in the array.

There are different memory sections to which the globals, heap, code and string literals go to. It is specific to the compiler used.

gcc makes a .rodata section which is a read-only section and the string literals are stored there.

Visual C++ creates a .rdata section for the read only section.

You can use objdump (on linux) to check different sections for your binary.

Storage for Strings in C, When a string value is directly assigned to a pointer, in most of the compilers, it's stored in stored in a shared read-only location, but pointer str is stored in a read-write memory. You can change str to point something else but cannot change value at present str. No problem: remains at address str after getString​() returns*/. A character string literal is a sequence of zero or more multibyte characters enclosed in double-quotes, as in "xyz". [] The representation, "xyz" produces the address of the first element of the string literal which is then stored into the pointer, as you've seen in the initialization time.

Pointers - C++ Tutorials, For a C++ program, the memory of a computer is like a succession of memory Pointers are said to "point to" the variable whose address they store. The main difference being that pointers can be assigned new addresses, while arrays cannot. String literals are arrays of the proper array type to contain all its characters  - compiler knows that a pointer to int refers to 4 bytes of memory on a machine with 4-byte integers, but a pointer to void simply contains a memory location for an unknown data type—the precise number of bytes to which the pointer refers is not known by the compiler

C++ All-In-One Desk Reference For Dummies, The pointer variable still holds the address of the allocated memory. endl; You can initialize a string by using parentheses when you call new for a string type. Even though the pointer points to a string, the pointer itself still holds a number  Any function which receives a pointer from a function should delete the pointer or return the pointer as a result. Avoid assigning one pointer to another (make a copy of the object pointed-to instead).

Character Array and Character Pointer in C, It allocates 12 consecutive bytes of memory and associates the address of the first After the above assignment, ptr points to the address of "Yellow World" which is We can assign a new string to arr by using gets() , scanf() , strcpy() or by  Reading a string using fscanf is somewhat dangerous. It is possible that the input you enter may be longer than the memory allocated by the character array. For example, if you type something more than 9 characters, enough memory have not been allocated for the string and the program may segfault. For example, enter the following program and see

Comments
  • Most likely the compiler will detect that the first literal is not doing something meaningful and replace the whole code with char *p = "hello_2";
  • To prevent modification of the string constant you want const char *p = "hello"; Only declare a non-constant character pointer if you intend to change the string it points to.
  • I think you mean "As long as" or maybe "While" instead of "Till".