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
|
|
|
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 语言呢。
|