标题:好急好急呀 又是null pointer assignment 的问题
只看楼主
缺月挂疏桐
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-3-23
 问题点数:0 回复次数:18 
好急好急呀 又是null pointer assignment 的问题
为什么程序又出现了null pointer assignment
我查了半天没看见数组越界呢
#include "stdio.h"
#include "string.h"
main()
{int n,m,i,j,k,p,q,s,k1,l,sig,num,r;
char a[200][200],t='\n',b[200][200],ch;
scanf("%d",&num);
ch=getchar();
ch=getchar();
do{s=0;
scanf("%d %d%c",&m,&n,t);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf(" %c",&a[i][j]);
for(i=0;i<m;i++)
a[i][n]='\0';
scanf("%d",&k);
k1=0;
do{scanf("%s",b[k1]);
l=strlen(b[k1]);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{if(a[i][j]==b[0][0])
{sig=1;
{if(l<=n-j)
{for(p=0,q=j;p<l;p++,q++)
if(a[i][q]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=j+1)
{for(p=0,q=j;p<l;p++,q--)
if(a[i][q]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=i+1)
{for(p=0,q=i;p<l;p++,q--)
if(a[q][j]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=m-i)
{for(p=0,q=i;p<l;p++,q++)
if(a[q][j]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=n-j&&l<=m-i)
for(p=0,q=i,r=j;p<l;p++,q++,r++)
{if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=i+1&&l<=j+1)
{for(p=0,r=j,q=i;p<l;p++,r--,q--)
if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=m-i&&l<=j+1)
for(p=0,r=j,q=i;p<l;p++,r--,q++)
{if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=i+1&&l<=n-j)
for(p=0,r=j,q=i;p<l;p++,r++,q--)
{if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
}
}
t: ;
k1++;
}while(k1<k);
s++;
}while(s<num);
}
搜索更多相关主题的帖子: assignment pointer null 
2007-04-24 18:52
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
scanf("%d %d%c",&m,&n,t);

代码风格实在难受.还用了goto.
弄好点再发上来.

看错误应该是null pointer assignment 空指针分配.

倚天照海花无数,流水高山心自知。
2007-04-24 19:13
缺月挂疏桐
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-3-23
得分:0 
不是我不想弄好 而是不知道怎么弄了
就是那个goto 本来是想跳出循环的 但是用break 没跳出去
就只有用goto 一个空语句跳出了


2007-04-24 19:20
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 

设置一个标记跳出来.


倚天照海花无数,流水高山心自知。
2007-04-24 19:24
缺月挂疏桐
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-3-23
得分:0 
在那里设置一个标记跳出来呢

2007-04-24 20:06
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
得分:0 
你把程序整理一下
再加上程序目的
要不看你的程序可能要比写你的程序花更多时间
2007-04-24 20:17
缺月挂疏桐
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-3-23
得分:0 
程序的目的是
分若干组数据输入字母表
{给定一个m*n的字母表
给定若干个单词
在字母表中寻找单词是否出现
可以从八个方向寻找
即向右,向左,向上,向下,左上,左下,右上,右下
找到即输出字母表中单词首字母对应的位置
若出现多次 只输出最左上角的那个位置
#include "stdio.h"
#include "string.h"
main()
{int n,m,i,j,k,p,q,s,k1,l,sig,num,r;
char a[200][200],b[200][200],ch;
scanf("%d",&num);/输入几组单词表/
ch=getchar();
ch=getchar();
s=0;
do{
scanf("%d %d",&m,&n);/单词表的行数列数/
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf(" %c",&a[i][j]);/输入单词表中字母/

scanf("%d",&k);/被寻找单词的个数/
k1=0;
do{scanf("%s",b[k1]);/输入被寻找的单词/
l=strlen(b[k1]);
for(i=0;i<m;i++)/一个个从首字母进行寻找判断/
for(j=0;j<n;j++)
{if(a[i][j]==b[0][0])
{sig=1;/标志变量/
{if(l<=n-j) /当首字母相同的时候从八个方向进行寻找/
{for(p=0,q=j;p<l;p++,q++)
if(a[i][q]!=b[k1][p]) /比较每个方向上的各个字符是否与单词相同,不同时跳出循环/
{sig=0;
break;
}
}
else sig=0;
if(sig==1) /包含单词时时输出字母表中的对应的与被找单词相同的第一个字母的位置/
{printf("%d %d\n",i+1,j+1);
goto t; /想跳出循环但是用break跳不出整个,就用了goto/
}
}
{if(l<=j+1)
{for(p=0,q=j;p<l;p++,q--)
if(a[i][q]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=i+1)
{for(p=0,q=i;p<l;p++,q--)
if(a[q][j]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=m-i)
{for(p=0,q=i;p<l;p++,q++)
if(a[q][j]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=n-j&&l<=m-i)
for(p=0,q=i,r=j;p<l;p++,q++,r++)
{if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=i+1&&l<=j+1)
{for(p=0,r=j,q=i;p<l;p++,r--,q--)
if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=m-i&&l<=j+1)
for(p=0,r=j,q=i;p<l;p++,r--,q++)
{if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
{if(l<=i+1&&l<=n-j)
for(p=0,r=j,q=i;p<l;p++,r++,q--)
{if(a[q][r]!=b[k1][p])
{sig=0;
break;
}
}
else sig=0;
if(sig==1)
{printf("%d %d\n",i+1,j+1);
goto t;
}
}
}
}
t: ;
k1++;
}while(k1<k);
s++;
}while(s<num);
}


2007-04-24 23:50
缺月挂疏桐
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-3-23
得分:0 
不知道这样说行吗 修改程序是啥意思呢
要不我再修改修改 不过实在不知道怎么样改呢
有的地方输入是为了符合题目中规定的意思哈
比如两个getchar()是为了输入'\n'呢哈

因为是用机器判程序呢

2007-04-25 00:01
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 
漏断人初静

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-04-25 08:44
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
得分:0 
以下是引用Knocker在2007-4-25 8:44:46的发言:
漏断人初静

服了老K了
竟然在技术区灌水
而且你对的也太差了

2007-04-25 12:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-134586-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013556 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved