首页 > 解决方案 > 为什么这总是显示错误:未分配重新分配的指针

问题描述

我正在尝试从文件中读取并将每行的指针放入双指针“堆栈”,但总是无法重新分配它。也许我应该使用三指针????

int i = 1;
char * line = malloc(BUFSIZ);
char ** stack;
stack = (char ** ) malloc(sizeof(char * ));

while (fgets(line, BUFSIZ, file) != NULL) {
    stack = & line;
    printf("//%s", line);
    printf("??%s", * stack);
    i++;
    stack = (char ** ) realloc(stack, sizeof(char * ) * i);
}

标签: cmemory-managementfgetsc-stringsrealloc

解决方案


您收到此错误消息是因为您将stack地址设置为line. 结果,stack不再是分配的块。

您的代码中有一些错误。

  • 您应该将该行存储在索引处的堆栈中i
  • 你应该为每一行分配一个新块
  • 您应该重新分配 i+1 行,以便为下一行(如果有)腾出空间

这是更正后的代码:

int i = 0; // number of line pointers in the stack
char *line = malloc(BUFSIZ);
char **stack = malloc(sizeof(char*));
while( fgets(line, BUFSIZ, file) != NULL) {
    stack[i] = line;
    printf("//%s", line);
    printf("??%s", stack[i]);
    i++;
    line = malloc(BUFSIZ); // allocate a new block for the next line
    stack = realloc(stack, sizeof(char*)*(i+1)); // make room for the next line
}

推荐阅读