【发布时间】:2018-03-21 13:12:15
【问题描述】:
我有一个使用 malloc 指针的模拟二维数组,我想获取该数组的大小,因为 sizeof() 返回指针的大小。 我的代码(ANSI C):
void main(){
int s1=10;
int s2=15;
int ** rack=(int**)malloc(s1*sizeof(int**));
for(int i=0; i<s1; i++) rack[i]=(int*)malloc(s2*sizeof(int*));
}
我想要这样的功能(可能是系统,也可能是我自己做的):
size(rack) //returns 10
size(rack[0]) //returns 15
提前致谢! (有关更多信息,我使用 GNU/Linux)
【问题讨论】:
-
请注意pointer to pointer array is not really 2D array。此外,ANSI C 指的是旧的、过时的 C 版本;如果您使用的是 Linux,则很有可能升级到 C11。
-
一个好习惯是不要将
malloc中的sizeof使用类型,而是使用指针应该指向malloc(s1*sizeof *rack)的对象。同样在 C 中,您不应该将malloc和朋友的返回值强制转换。 -
您在 malloc 中分配了错误的空间量
-
如果给定一个指针,该指针使用
malloc返回的值分配/初始化,则没有(便携式)方法可以找出最初请求了多少内存。这些链接可能感兴趣:stackoverflow.com/a/28854641/4386427 或 man7.org/linux/man-pages/man3/malloc_usable_size.3.html 或 stackoverflow.com/questions/44581168/… -
我并不是说你不能,但是在 C 中,你分配内存并且你负责跟踪分配。没有一个简单的库函数可以告诉您之前在代码中为变量
X分配了多少内存。 (并且具有多个功能和范围,该信息可能在运行时不可用)
标签: c arrays pointers malloc dynamic-memory-allocation