由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 数组分配问题,求教
相关主题
再问:关于多维数组的malloc问个程序问题
怎么得到char *分配空间的大小?Re: 怎样获得一块指针storage的大小?
大家新年好。 请教一个 c interview question如何在数组中存无限量的元素?比较复杂
C里面一个被分配了内存的指针如何知道分配了多少?请教一个程序调用的内存问题 (转载)
在子函数内开内存,返回主函数指针然后释放空间是不是很糟糕的(转载)数组问题
关于malloc/free和循环请教 C/C++ 指向多维数组的指针的问题
数组定义的时候,分配空间了么?为什么要这样计算数中元素的个数?
再问一个free()的问题C pass string 问题
相关话题的讨论汇总
话题: int话题: signed话题: data话题: short话题: storage
进入Programming版参与讨论
1 (共1页)
y**********n
发帖数: 37
1
要把数据文件稍微处理一下,想写个简单的C程序弄一下。但编译不通过,真心求问。
很久没怎么碰过编程了,大侠不要笑话 :)
目的就是要申请一个三维数组 data_storage[125][125][200]

short signed int*** data_storage = NULL;
data_storage = (short signed int***)malloc(sizeof(short signed int)*125);
int i=0, k=0;
for(i=0; i<125;i++)
{
data_storage[i] = (short signed int**)malloc(sizeof(short
signed int)*125);
for(k=0; k<125; k++)
{
data_storage[i][k] = (short signed int*)malloc(sizeof(
short signed int)*200);
}
}
这个错在哪里啊,多谢!!
b***i
发帖数: 3043
2
错哪一行?

【在 y**********n 的大作中提到】
: 要把数据文件稍微处理一下,想写个简单的C程序弄一下。但编译不通过,真心求问。
: 很久没怎么碰过编程了,大侠不要笑话 :)
: 目的就是要申请一个三维数组 data_storage[125][125][200]
:
: short signed int*** data_storage = NULL;
: data_storage = (short signed int***)malloc(sizeof(short signed int)*125);
: int i=0, k=0;
: for(i=0; i<125;i++)
: {
: data_storage[i] = (short signed int**)malloc(sizeof(short

y**********n
发帖数: 37
3
编译时通过的,但是无法运行,一运行就崩溃。

【在 b***i 的大作中提到】
: 错哪一行?
r*****e
发帖数: 792
4
malloc里边的sizeof不能一直都是sizeof(int)吧,应该有int**, int*吧。
跟你前面ptr cast应该一致。

【在 y**********n 的大作中提到】
: 要把数据文件稍微处理一下,想写个简单的C程序弄一下。但编译不通过,真心求问。
: 很久没怎么碰过编程了,大侠不要笑话 :)
: 目的就是要申请一个三维数组 data_storage[125][125][200]
:
: short signed int*** data_storage = NULL;
: data_storage = (short signed int***)malloc(sizeof(short signed int)*125);
: int i=0, k=0;
: for(i=0; i<125;i++)
: {
: data_storage[i] = (short signed int**)malloc(sizeof(short

b***i
发帖数: 3043
5
试试开始分配指针,而不是short signed int本身的大小

就崩溃。

【在 y**********n 的大作中提到】
: 编译时通过的,但是无法运行,一运行就崩溃。
k****e
发帖数: 126
6
为啥不连续分配125×125×200这么大空间?
Inside the inner for loop, 在k++之后使用这个data_storage[i][k]没有跳过一个大
小为200×short的空间,而只是跳过了一个short int大小的空间导致了crash吧。
k****e
发帖数: 126
7
typedef signed short (*data_storeage_t)[125][200];
data_storage_t data_storage;
data_storage = (data_storage_t)malloc(125 * 125 * 200 * sizeof(signed short)
);
然后就可以用三维数组的index比如data_storage[x][y][z]访问了。
m*********t
发帖数: 527
8
short signed int 和指针的长度不一样。你自己看看 sizeof(short signed int)
和 sizeof(any data pointer)。你这个情况下估计 short int 是 2, 但是指针是 4
(32
bit) 或者 8(64 bit).

【在 y**********n 的大作中提到】
: 要把数据文件稍微处理一下,想写个简单的C程序弄一下。但编译不通过,真心求问。
: 很久没怎么碰过编程了,大侠不要笑话 :)
: 目的就是要申请一个三维数组 data_storage[125][125][200]
:
: short signed int*** data_storage = NULL;
: data_storage = (short signed int***)malloc(sizeof(short signed int)*125);
: int i=0, k=0;
: for(i=0; i<125;i++)
: {
: data_storage[i] = (short signed int**)malloc(sizeof(short

y**********n
发帖数: 37
9
谢谢大家的回复啊。应该确实是short int和指针长度不同造成的。改到int就正常了。
多谢啊!

4

【在 m*********t 的大作中提到】
: short signed int 和指针的长度不一样。你自己看看 sizeof(short signed int)
: 和 sizeof(any data pointer)。你这个情况下估计 short int 是 2, 但是指针是 4
: (32
: bit) 或者 8(64 bit).

b***i
发帖数: 3043
10
to be accurate, should be size of a pointer, not int
Your Type *** data;
data = malloc (sizeof((Your Type **) * size))
always use one less * in the malloc( size of)

【在 y**********n 的大作中提到】
: 谢谢大家的回复啊。应该确实是short int和指针长度不同造成的。改到int就正常了。
: 多谢啊!
:
: 4

相关主题
关于malloc/free和循环问个程序问题
数组定义的时候,分配空间了么?Re: 怎样获得一块指针storage的大小?
再问一个free()的问题如何在数组中存无限量的元素?比较复杂
进入Programming版参与讨论
m*********t
发帖数: 527
11
It does not matter which data type the pointer is pointed to. So sizeof(T**)
== sizeof(T*) on modern computers.

【在 b***i 的大作中提到】
: to be accurate, should be size of a pointer, not int
: Your Type *** data;
: data = malloc (sizeof((Your Type **) * size))
: always use one less * in the malloc( size of)

d***a
发帖数: 13752
12
这样是更好的做法。
用指针数组程序更复杂,运行效率也相对较低。
第一句有点小错,数组少定义了一维。

short)

【在 k****e 的大作中提到】
: typedef signed short (*data_storeage_t)[125][200];
: data_storage_t data_storage;
: data_storage = (data_storage_t)malloc(125 * 125 * 200 * sizeof(signed short)
: );
: 然后就可以用三维数组的index比如data_storage[x][y][z]访问了。

b***i
发帖数: 3043
13
哪里错了?

【在 d***a 的大作中提到】
: 这样是更好的做法。
: 用指针数组程序更复杂,运行效率也相对较低。
: 第一句有点小错,数组少定义了一维。
:
: short)

d****i
发帖数: 4809
14
同问。

【在 b***i 的大作中提到】
: 哪里错了?
B***i
发帖数: 724
15
简单一次性的数据处理就不用要C了。 用点什么别的, 比如说python, matlab 之类的
不是挺好的吗?
d***a
发帖数: 13752
16
Oops,那个没有错(除了data_storeage_t里有个typo)。
说句题外话,按传统C编程的简约风格,可以写成如下一句
signed short (*data_storage)[125][200] = malloc(125 * sizeof(*data_storage));
然后就可以用data_storage[i][j][k]这样的形式来访问了。在C编程中,malloc前不建
议加指针类型的type casting,因为void*指针转换成其它类型指针被认为是安全的,
type casting就多余了(不用也不会产生C编译报警)。

【在 b***i 的大作中提到】
: 哪里错了?
b***i
发帖数: 3043
17
同意,我都是用java, 写个BASIC的解释程序,然后用BASIC的。需要特殊的函数就自己
定义一个。

【在 B***i 的大作中提到】
: 简单一次性的数据处理就不用要C了。 用点什么别的, 比如说python, matlab 之类的
: 不是挺好的吗?

B***i
发帖数: 724
18
LOL. 我一看还以为你写了一个 BASIC 语言的 解释器,然后再用basic 语言呢。

【在 b***i 的大作中提到】
: 同意,我都是用java, 写个BASIC的解释程序,然后用BASIC的。需要特殊的函数就自己
: 定义一个。

b***i
发帖数: 3043
19
那你现在的理解是什么?

【在 B***i 的大作中提到】
: LOL. 我一看还以为你写了一个 BASIC 语言的 解释器,然后再用basic 语言呢。
1 (共1页)
进入Programming版参与讨论
相关主题
C pass string 问题在子函数内开内存,返回主函数指针然后释放空间是不是很糟糕的(转载)
size不固定的struct怎么定义呀?关于malloc/free和循环
ask a c question数组定义的时候,分配空间了么?
初学C,对什么该free一直搞不明白再问一个free()的问题
再问:关于多维数组的malloc问个程序问题
怎么得到char *分配空间的大小?Re: 怎样获得一块指针storage的大小?
大家新年好。 请教一个 c interview question如何在数组中存无限量的元素?比较复杂
C里面一个被分配了内存的指针如何知道分配了多少?请教一个程序调用的内存问题 (转载)
相关话题的讨论汇总
话题: int话题: signed话题: data话题: short话题: storage