新人求助,C语言用malloc出现读取位置冲突,一直找不到原因,求大神,我把代码贴出来,二楼说一下题目

菜鸟程序员员 2015-12-01 10:33:03
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void GetResult(int);
int main(void)
{
int Num;
scanf("%d", &Num);
GetResult(Num);
system("pause");
return 0;
}

void GetResult(int Num)
{
int i, j;
int **pResult= (int**)malloc(Num*sizeof(int*));
for (i = 0;i < Num;i++)
{
pResult[i] = (int*)malloc(Num*sizeof(int));
memset(pResult[i], 0, sizeof(int)*Num);
}
for (i = 0;i < Num;i++)
{
if (i = 0)
{
pResult[0][0] = 1;
for (j = 1;j < Num - i;j++)
pResult[i][j] = pResult[i][j - 1] + j + 1;
}
else
{
pResult[i][0] = pResult[i - 1][0] + i;
for (j = 1;j < Num - i;j++)
pResult[i][j] = pResult[i][j - 1] + i + 2;
}
}
for (i = 0;i < Num;i++)
{
for (j = 0;j < Num;j++)
printf("%d ", pResult[i][j]);
putchar('\n');
}
for (i = 0;i < Num;i++)
free(pResult[i]);
free(pResult);
}
...全文
202 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-12-02
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
paschen 2015-12-02
  • 打赏
  • 举报
回复
这一中:pResult[i][0] = pResult[i - 1][0] + i; 在第一次循环的时候,i 是0 ,那么会访问到i-1项数组当然出错了
flying_music 2015-12-02
  • 打赏
  • 举报
回复
引用 2 楼 xusongge 的回复:
55555555,我自己居然会犯这么傻 的问题,单步调试发现原因是i=0的原因
哈哈,这种问题谁也免不了的,可以养成写0==i的习惯,这样会直接报错,不用再单步找原因了
菜鸟程序员员 2015-12-01
  • 打赏
  • 举报
回复
55555555,我自己居然会犯这么傻 的问题,单步调试发现原因是i=0的原因
菜鸟程序员员 2015-12-01
  • 打赏
  • 举报
回复
题目是输入一个数字,比如5,输出结果是
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
是华为在线软件测试平台上的一个题目,叫蛇形矩阵,我用malloc做,不用固定数组大小的方法,求大神解决问题

69,382

社区成员

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

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