I am confused about how to allocate memory correctly. I am trying to make a list of char\*'s from a text file. Every time I make a char\* do I have to allocate memory for it? When and where are the exceptions?

```
#define BUFF 1000   

 int main(int argc, char** argv)
 {
  FILE* file;
    file = fopen(argv[1], "r");
    char* word = calloc(BUFF, sizeof(char));
    char* sentence = calloc(BUFF, sizeof(char));
    char** list = calloc(BUFF, sizeof(char*));
    int i = 0;
while((fgets(sentence, BUFF, file)) != NULL)
{
  word = strtok(sentence, " ,/.");
  while(word != NULL)
  { 
    printf("%s\n", word);
    strcpy(list[i],  word);
    i++;
    word = strtok(NULL, " ,/.");
  } 
}
int k;
for(k = 0; k < i; k++)
{
 puts("segging here");
 printf("%s\n", list[i]);
}

```