fork(3) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int test(char *output, int *output_len) {
  6. int old_output_len;
  7.  
  8. printf("\ninner before: %d\n", output);
  9.  
  10. // Add text first time
  11. old_output_len = *output_len;
  12. *output_len += 11;
  13. printf("%d\t", *output_len);
  14.  
  15. output = realloc(output, *output_len);
  16. memset(output + old_output_len, 0, 11);
  17. *output = strcat(&output, "this is 11");
  18. printf("%d\n", output);
  19.  
  20. /*
  21.   // Extend text
  22.   old_output_len = *output_len;
  23.   *output_len += 11;
  24.   printf("%d\t", *output_len * sizeof(char));
  25.  
  26.   // Ignore, now this doesn't get new pointer, unlike in previous code! but it still works though
  27.   &output = realloc(output, *output_len * sizeof(char));
  28.   memset(output + old_output_len, 0, 11);
  29.   *output = strcat(&output, "this is 11");
  30.   printf("%d\n", output);
  31.   printf("\ninner after: %d\n", output);*/
  32. }
  33.  
  34. int main() {
  35. char *output = NULL;
  36. int output_len = 0;
  37.  
  38. printf("\nbefore: %d\n", &output);
  39. test(&output, &output_len);
  40. printf("\nafter:%d\n", &output);
  41.  
  42. // This prints 0, wasn't output pointer updated by test?
  43. printf("\n\n%d\n\n", output);
  44. printf("%d\n", output_len);
  45.  
  46. free(output);
  47. //system("pause");
  48.  
  49. return EXIT_SUCCESS;
  50. }
  51.  
Runtime error #stdin #stdout #stderr 0s 2496KB
stdin
Standard input is empty
stdout
before: -1076954200

inner before: -1076954200
11	
stderr
*** Error in `./prog': realloc(): invalid pointer: 0xbfcefba8 ***
======= Backtrace: =========
/lib/i386-linux-gnu/i686/cmov/libc.so.6(+0x75e72)[0xb756ce72]
/lib/i386-linux-gnu/i686/cmov/libc.so.6(realloc+0x275)[0xb7570ad5]
/lib/i386-linux-gnu/i686/cmov/libc.so.6(realloc+0x28b)[0xb7570aeb]
./prog[0x80485b6]
./prog[0x804842e]
/lib/i386-linux-gnu/i686/cmov/libc.so.6(__libc_start_main+0xf5)[0xb75108f5]
./prog[0x804849d]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:03 1409510    /home/b3XfTW/prog
08049000-0804a000 rw-p 00000000 08:03 1409510    /home/b3XfTW/prog
09776000-09797000 rw-p 00000000 00:00 0          [heap]
b74d5000-b74f0000 r-xp 00000000 08:03 1303883    /lib/i386-linux-gnu/libgcc_s.so.1
b74f0000-b74f1000 rw-p 0001a000 08:03 1303883    /lib/i386-linux-gnu/libgcc_s.so.1
b74f5000-b74f7000 rw-p 00000000 00:00 0 
b74f7000-b76a0000 r-xp 00000000 08:03 1303839    /lib/i386-linux-gnu/i686/cmov/libc-2.17.so
b76a0000-b76a1000 ---p 001a9000 08:03 1303839    /lib/i386-linux-gnu/i686/cmov/libc-2.17.so
b76a1000-b76a3000 r--p 001a9000 08:03 1303839    /lib/i386-linux-gnu/i686/cmov/libc-2.17.so
b76a3000-b76a4000 rw-p 001ab000 08:03 1303839    /lib/i386-linux-gnu/i686/cmov/libc-2.17.so
b76a4000-b76a7000 rw-p 00000000 00:00 0 
b76a7000-b76e8000 r-xp 00000000 08:03 1303836    /lib/i386-linux-gnu/i686/cmov/libm-2.17.so
b76e8000-b76e9000 r--p 00040000 08:03 1303836    /lib/i386-linux-gnu/i686/cmov/libm-2.17.so
b76e9000-b76ea000 rw-p 00041000 08:03 1303836    /lib/i386-linux-gnu/i686/cmov/libm-2.17.so
b76ec000-b76f0000 rw-p 00000000 00:00 0 
b76f0000-b76f1000 r-xp 00000000 00:00 0          [vdso]
b76f1000-b7710000 r-xp 00000000 08:03 1303796    /lib/i386-linux-gnu/ld-2.17.so
b7710000-b7711000 r--p 0001f000 08:03 1303796    /lib/i386-linux-gnu/ld-2.17.so
b7711000-b7712000 rw-p 00020000 08:03 1303796    /lib/i386-linux-gnu/ld-2.17.so
bfcdc000-bfcf1000 rw-p 00000000 00:00 0          [stack]