| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 412 人关注过本帖
标题:多维数组的定义问题
只看楼主 加入收藏
yylalex
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-1-22
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
多维数组的定义问题
现在有这么几个文件
main.cpp
a.cpp
a.h
b.cpp

main.cpp里面是main函数,
a.h里面定义了一个四维数组int ****x,因为要在b.cpp里使用(b.cpp使用a.h)
a.cpp里面保证x的内存:
 x=(int ****)malloc(100*sizeof(int***));
    for (int i=0; i<100; i++) {
        x[i]=(int ***)malloc(100*sizeof(int**));
    }
    for (int i=0; i<100; i++) {
        for (int j=0; j<100; j++) {
            x[i][j]=(int **)malloc(100*sizeof(int*));
        }
    }
    for (int i=0; i<100; i++) {
        for (int j=0; j<100; j++) {
            for (int k=0; k<100; k++) {
                x[i][j][k]=(int *)malloc(2*sizeof(int));
            }
        }
    }
然后在x[i][j][k][l]里面处理数据。

实行时直接出现segmentation fault。大神们能帮我看看是什么问题吗?
2014-01-22 22:36
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:7 
只能理解1维  2维  3维   3维以上的无法理解

DO IT YOURSELF !
2014-01-23 11:02
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:7 
只能理解1维 2维  2维以上的无法理解.
2014-01-23 13:04
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:0 
1.内存访问越界

 a) 由于使用错误的下标,导致数组访问越界

 b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符

 c) 使用strcpy, strcat, sprintf, strcmp, strcasecmp等字符串操作函数,将目标字符串读/写爆。应该使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函数防止读写越界。

2 非法指针

a) 使用空指针

b) 随意使用指针转换。一个指向一段内存的指针,除非确定这段内存原先就分配为某种结构或类型,或者这种结构或类型的数组,否则不要将它转换为这种结构或类型的指针,而应该将这段内存拷贝到一个这种结构或类型中,再访问这个结构或类型。这是因为如果这段内存的开始地址不是按照这种结构或类型对齐的,那么访问它时就很容易因为bus error而core dump.

3 堆栈溢出.不要使用大的局部变量(因为局部变量都分配在栈上),这样容易造成堆栈溢出,破坏系统的栈和堆结构,导致出现莫名其妙的错误。


段错误
一般都是非法内存操作,例如数组越界,例如申请a[5],却访问到a[5]或者a[6],这也会有很多情况,可能是循环操作时循环变量控制有问题,可能是字符串拷贝时长度发生溢出
指针指向了非法内存,例如申明一个指针,但是没有对指针进行初始化,直接就引用,或者引用里面的元素或者函数,或者没有分配内存就进行释放等,另外,申请内存还要检查是否申请成功,如果没有申请成功也会出现这种情况

单步调试或者加打印信息,细心一点总可以找到错误的,注意编译成调试版本
如果是linux,可以产生core文件,从core文件查看出错的地方

以上引用网络。
2014-01-23 13:14
xxy0815
Rank: 1
等 级:新手上路
帖 子:1
专家分:7
注 册:2014-1-23
收藏
得分:7 
我是把一维理解成线,二维理解成面,三位理解成体,四维是在体内再加个参数
2014-01-23 16:58
快速回复:多维数组的定义问题
数据加载中...
 
   



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

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