C文件处理问题!

libinden71 2016-01-15 05:11:38
void paixu(int *p, int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = i; j < n; j++)
{
if (p[j] < p[i])
{
int tmp = p[j];
p[j] = p[i];
p[i] = tmp;
}
}
}
}

int main()
{
int len[1];
int cons = 0;
// int max[100];

FILE *ps = fopen("f:\\a.txt", "r");
while (!feof(ps))
{
memset(len, 0, sizeof(len));
fgets(len, sizeof(int), ps);
cons++;
}
fclose(ps);

int *max = calloc(sizeof(int), cons);
cons = 0;

FILE *p = fopen("f:\\a.txt", "r");
while (!feof(p))
{
memset(len, 0, sizeof(len));
fgets(len, sizeof(int), p);
max[cons] = atoi(len);
cons++;

}
fclose(p);

FILE *pi = fopen("f:\\b.txt", "w");
paixu(&max, cons);
int i;
for (i = 0; i < cons; i++)
{
memset(len, 0, sizeof(len));
sprintf(len,"%d\n", max[i]);
fputs(len, pi);
}
fclose(pi);

return 0;
}

//使用int max[100] 这样的数组形式程序没问题,但是在堆里分配内存就错误!找不到原因,求解答!
...全文
138 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-01-17
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
paschen 2016-01-17
  • 打赏
  • 举报
回复
引用 15 楼 libinden71 的回复:
[quote=引用 12 楼 paschen 的回复:] [quote=引用 11 楼 libinden71 的回复:] [quote=引用 9 楼 paschen 的回复:] 楼上说得对,max已经是指针了
max已经是指针了?我不是很懂这个意思[/quote] int *max [/quote] paixu(&max, cons); ==> paixu(max, cons); 取地址去掉就可以了!我表示无法理解!传递给指针*p 不是应该传的是数组的地址吗?[/quote] max本身已经是数组的首地址了,如果再&就变成max这个指针变量的地址了
libinden71 2016-01-17
  • 打赏
  • 举报
回复
引用 14 楼 paschen 的回复:
[quote=引用 13 楼 libinden71 的回复:] [quote=引用 8 楼 wang0635 的回复:] paixu(&max, cons); ==> paixu(max, cons);
为什么传递地址反而错了? max是数组,传递给指针*p 不应该传的是max的地址吗? 还有个问题 为什么说max已经是指针了 表示不是很明白 ![/quote] 你传递&max传递的就是max这个指针的地址,也就是int**类型了 max本身已经是一个指针了,只是他指向的内存作为了一个数组用[/quote] 懂了懂了 恍然大悟!万分感谢!
libinden71 2016-01-17
  • 打赏
  • 举报
回复
引用 12 楼 paschen 的回复:
[quote=引用 11 楼 libinden71 的回复:] [quote=引用 9 楼 paschen 的回复:] 楼上说得对,max已经是指针了
max已经是指针了?我不是很懂这个意思[/quote] int *max [/quote] paixu(&max, cons); ==> paixu(max, cons); 取地址去掉就可以了!我表示无法理解!传递给指针*p 不是应该传的是数组的地址吗?
paschen 2016-01-17
  • 打赏
  • 举报
回复
引用 13 楼 libinden71 的回复:
[quote=引用 8 楼 wang0635 的回复:] paixu(&max, cons); ==> paixu(max, cons);
为什么传递地址反而错了? max是数组,传递给指针*p 不应该传的是max的地址吗? 还有个问题 为什么说max已经是指针了 表示不是很明白 ![/quote] 你传递&max传递的就是max这个指针的地址,也就是int**类型了 max本身已经是一个指针了,只是他指向的内存作为了一个数组用
libinden71 2016-01-17
  • 打赏
  • 举报
回复
引用 8 楼 wang0635 的回复:
paixu(&max, cons); ==> paixu(max, cons);
为什么传递地址反而错了? max是数组,传递给指针*p 不应该传的是max的地址吗? 还有个问题 为什么说max已经是指针了 表示不是很明白 !
paschen 2016-01-17
  • 打赏
  • 举报
回复
引用 11 楼 libinden71 的回复:
[quote=引用 9 楼 paschen 的回复:] 楼上说得对,max已经是指针了
max已经是指针了?我不是很懂这个意思[/quote] int *max
libinden71 2016-01-17
  • 打赏
  • 举报
回复
引用 9 楼 paschen 的回复:
楼上说得对,max已经是指针了
max已经是指针了?我不是很懂这个意思
paschen 2016-01-16
  • 打赏
  • 举报
回复
楼上说得对,max已经是指针了
wang0635 2016-01-16
  • 打赏
  • 举报
回复
paixu(&max, cons); ==> paixu(max, cons);
libinden71 2016-01-16
  • 打赏
  • 举报
回复
引用 5 楼 paschen 的回复:
点重试,然后点中断,然后看断在哪,通过调用堆栈定位到你代码的位置,然后通过相关变量窗口观察分析原因
如果还是找不到,你发下断下是在哪,还有文件内容是什么,我帮你试下


libinden71 2016-01-16
  • 打赏
  • 举报
回复
引用 5 楼 paschen 的回复:
点重试,然后点中断,然后看断在哪,通过调用堆栈定位到你代码的位置,然后通过相关变量窗口观察分析原因 如果还是找不到,你发下断下是在哪,还有文件内容是什么,我帮你试下
初学者 还不会调试和断点 文件的内容就是一堆自己写的数字: 12 65 95 ... 把这些数字排序! 这个是断点的结果: Run-Time Check Failure #2 - Stack around the variable 'len' was corrupted.
paschen 2016-01-15
  • 打赏
  • 举报
回复
点重试,然后点中断,然后看断在哪,通过调用堆栈定位到你代码的位置,然后通过相关变量窗口观察分析原因 如果还是找不到,你发下断下是在哪,还有文件内容是什么,我帮你试下
libinden71 2016-01-15
  • 打赏
  • 举报
回复
paschen 2016-01-15
  • 打赏
  • 举报
回复
引用 2 楼 libinden71 的回复:
[quote=引用 1 楼 paschen 的回复:] int *max = (int*)calloc(cons, sizeof(int));
不行啊 还是错误![/quote] 什么错误
libinden71 2016-01-15
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
int *max = (int*)calloc(cons, sizeof(int));
不行啊 还是错误!
paschen 2016-01-15
  • 打赏
  • 举报
回复
int *max = (int*)calloc(cons, sizeof(int));

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧