如何解决realloc() 中的分段错误核心转储
为什么下面的程序会出现 Segmentation fault 错误?? (此代码具有更多的教育意义。)
#include <stdio.h>
#include <stdlib.h>
void increase_(char ***pptr)
{
for(int i=1; i<=100; i++) {
*pptr = (char **)realloc(*pptr,i * sizeof(char *));
*pptr[i-1] = (char *)malloc(i * sizeof(char));
*pptr[i-1][0] = i;
}
}
int main()
{
char **ptr = (char **)malloc(sizeof(char *));
increase_(&ptr);
for(int i=0; i<100; i++)
printf("%d\n",ptr[i][0]);
return(0);
}
程序输出:
1
2
Segmentation fault (core dumped)
解决方法
分段错误是由于无效的指针解除引用造成的。我在 Online C Compiler 上运行了这个程序,立即出现了分段错误,输出中没有您的 1
或 2
。根据 Online C Compiler,increase_()
函数中发生了分段错误。尝试限制您的指针具有的取消引用级别。我的C书上说在实践中最多只有两个级别,超过这个就很麻烦了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。