Guest User

Untitled

a guest
Aug 21st, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.45 KB | None | 0 0
  1. Values in array of structs turning into garbage values
  2. void Initialize (List *L) {
  3. char* initialize = "initialize";
  4. int i;
  5.  
  6. for (i=0; i<MAXLISTSIZE; i++) {
  7. strncpy(L->items[i].name,initialize,MAXNAMESIZE);
  8. L->items[i].name[MAXNAMESIZE - 1] = '';
  9. L->items[i].grade = 0;
  10. printf("L->items[i].name = %sn", L->items[i].name);
  11. printf("L->items[i].grade = %dn", L->items[i].grade);
  12. }
  13. L->count = 0;
  14. }
  15.  
  16. typedef Student Item;
  17. #define MAXLISTSIZE 4
  18. typedef struct {
  19. Item items[MAXLISTSIZE];
  20. int count;
  21. } List;
  22.  
  23. #define MAXNAMESIZE 20
  24. typedef struct {
  25. char name[MAXNAMESIZE];
  26. int grade;
  27. } Student;
  28.  
  29. int main () {
  30. List *newList;
  31.  
  32. /*call initialize function*/
  33. newList = callInitialize();
  34.  
  35. return 0;
  36. }
  37.  
  38. List *callInitialize () {
  39. List *L;
  40.  
  41. List studentList;
  42. L = &studentList;
  43.  
  44. Initialize(L);
  45.  
  46. return L;
  47. }
  48.  
  49. List * foo()
  50. {
  51. List x; // <--- x comes to life
  52. return &x; // <--- x dies here...
  53. }
  54.  
  55. int main()
  56. {
  57. List * p = foo(); // ... but its address is used here!
  58. p->name ... // dereferencing an invalid address!!
  59. }
  60.  
  61. List * initList()
  62. {
  63. return malloc(sizeof(List)); // this memory is permanent
  64. }
  65.  
  66. void freeList(List * p)
  67. {
  68. free(p);
  69. }
  70.  
  71. List *callInitialize () {
  72. List *L;
  73.  
  74. List studentList;
  75. L = &studentList;
  76.  
  77. Initialize(L);
  78.  
  79. return L;
  80. }
  81.  
  82. List *callInitialize (void) {
  83. List *L = malloc (sizeof (List));
  84. if (L != NULL)
  85. Initialize(&L);
  86. return L;
  87. }
Add Comment
Please, Sign In to add comment