c - 为什么这总是显示错误:未分配重新分配的指针
问题描述
我正在尝试从文件中读取并将每行的指针放入双指针“堆栈”,但总是无法重新分配它。也许我应该使用三指针????
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);
}
解决方案
您收到此错误消息是因为您将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
}
推荐阅读
- xamarin - Xamarin.ios firebase 推送通知点击问题
- java - 从子目录访问包
- ruby-on-rails - 在 Rails 开发中完成 500 内部服务器错误
- python - 如何迭代数据框单元格的字符串?
- selenium-webdriver - CheckBox 不可点击,因为另一个元素
- html - HTML所有按钮不起作用,只有一个按钮起作用
- c - CLONE_SIGHAND 标志使 clone() 失败
- python - 我无法迭代(定位)从 selenium python 提交的这个输入,每次 id 更改,并且完整的 Xpath 也无法正常工作
- javascript - ng-if 如何获取控制器中输入元素的值
- html - 如何打开在 html5 游戏中使用的文件