| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1350 人关注过本帖
标题:*arr[i]++=*ar++; 为什么单步调试到这一条语句 就提示:“程序访问了非法地 ...
只看楼主 加入收藏
skyone2013
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-5-4
收藏
得分:0 
空间不够 是因为MAX的值小了吗(只要MAX的值大于8 输出就会出错),还是需要数组的定义的问题,如果我使用*arr[i]++=*ar++;这条语句的话,应该怎样定义 才能不越界,空间够用。求解!

[ 本帖最后由 skyone2013 于 2013-7-22 11:26 编辑 ]
2013-07-22 10:52
qjw2719
Rank: 2
等 级:论坛游民
帖 子:21
专家分:33
注 册:2012-3-15
收藏
得分:3 
回复 9楼 skyone2013
*arr[MXA]是指针数组,存放的是地址,没有初始化前都是nil,也就是无值,所以*arr[i]++ = *ar++会提示访问非法地址。应该是这原因吧
2013-07-22 15:14
rjvsky
Rank: 3Rank: 3
来 自:陕西西安
等 级:论坛游侠
帖 子:77
专家分:106
注 册:2012-3-6
收藏
得分:0 
你是申请了一个指针数组对吗?但是这些指针里面的值全部是垃圾,并且你没有给他申请空间,就对其进行操作,这难道换不是非法访问吗?

企业需要的人才,是真正可以给他们带来经济效益的人,而不是一大堆没用的证书,看淡证书,强化自己···
2013-07-22 21:30
skyone2013
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-5-4
收藏
得分:0 
我把*arr[i]++ = *ar++改成 *(*arr)++=*ar++; 定义由*arr[12]改成**arr,这样的话还需要申请空间吗,如果不申请char **arr里面可以存放的内容是多大容量。修正代码如下。

#include<stdio.h>
#include<stdlib.h>

void main(void)
{
 char **arr,*ar,**mami;
 int i=0,j=0,k=0,g=0,z=0;
 ar="AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK LLL MMM NNN OOO PPP QQQ RRR";
   while(*ar!='\0')
 {
    while(*ar!=' '&&*ar!='\0')
      {
       *(*arr)++=*ar++;
       k++;
      }
       **arr='\0';
        *arr-=k;
       puts(*arr);
       k=0;

      if(*ar=='\0')
       break;
        g++;
      ++arr;
      ++ar;
 }
}
2013-07-23 10:30
qjw2719
Rank: 2
等 级:论坛游民
帖 子:21
专家分:33
注 册:2012-3-15
收藏
得分:0 
*arr-=k;请问这是?
2013-07-23 10:51
qjw2719
Rank: 2
等 级:论坛游民
帖 子:21
专家分:33
注 册:2012-3-15
收藏
得分:0 
char **arr;
sizeof(**arr) = 1;
*(arr)++ 访问非法地址
2013-07-23 11:05
skyone2013
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-5-4
收藏
得分:0 
*arr-=k 相当于 for(i=0;i<g;i++)  arr[i]=arr[i]-k;

*(arr)++ 相当于 arr[i][j++];
2013-07-23 15:21
rjvsky
Rank: 3Rank: 3
来 自:陕西西安
等 级:论坛游侠
帖 子:77
专家分:106
注 册:2012-3-6
收藏
得分:0 
回复 14楼 skyone2013
说了你只定义了一个指针,都没申请空间,你的指向肯定是非法的 啊,现在的这个错的更离谱了!!1

企业需要的人才,是真正可以给他们带来经济效益的人,而不是一大堆没用的证书,看淡证书,强化自己···
2013-07-23 21:17
q13678986740
Rank: 4
等 级:业余侠客
帖 子:114
专家分:245
注 册:2012-7-7
收藏
得分:3 
指针数组未初始化就往里面放值。
2013-07-24 11:07
q13678986740
Rank: 4
等 级:业余侠客
帖 子:114
专家分:245
注 册:2012-7-7
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
#define MAX 12

void main()
{
char *arr[MAX],*p;
int i=0,j=0;
char ar[55]="AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK LLL";
puts(ar);
p=ar;
  while(*p!='\0')
{
   if(*p==' ')
      *p='\0';
      if(i%4==0)
           {
             arr[j]=p;
             j++;
           }
     i++;
     ++p;
}

for(i=0;i<j;i++)
{
puts(arr[i]);
}
getch();
}

这个能达到你的目的
2013-07-24 12:00
快速回复:*arr[i]++=*ar++; 为什么单步调试到这一条语句 就提示:“程序访问了非 ...
数据加载中...
 
   



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

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