我已经分配了一个像这样mystruct大小的"数组" n:
if (NULL == (p = calloc(sizeof(struct mystruct) * n,1))) {
/* handle error */
}
Run Code Online (Sandbox Code Playgroud)
后来,我只能访问p,不再拥有n.有没有办法只给出指针确定数组的长度p?
我认为它必须是可能的,因为free(p)就是这样.我知道malloc()它记录了它分配了多少内存,这就是它知道长度的原因; 也许有办法查询这些信息?就像是...
int length = askMallocLibraryHowMuchMemoryWasAlloced(p) / sizeof(mystruct)
Run Code Online (Sandbox Code Playgroud)
我知道我应该修改代码,以便我知道n,但如果可能,我宁愿不这样做.有任何想法吗?
这个问题的灵感来自一个类似的问题:delete []"如何"知道操作数数组的大小?
我的问题有点不同: 有没有办法以编程方式确定C++数组的大小?如果没有,为什么? 我看到的每个接受数组的函数也需要一个整数参数来赋予它大小.但正如链接问题指出的那样,delete[]必须知道要释放的内存大小.
考虑这个C++代码:
int* arr = new int[256];
printf("Size of arr: %d\n", sizeof(arr));
Run Code Online (Sandbox Code Playgroud)
这打印" Size of arr: 4",这只是指针的大小.有一些打印256的函数会很好,但我不认为C++中存在一个函数.(同样,问题的一部分是为什么它不存在.)
澄清:我知道如果我在堆栈上声明数组而不是堆(即" int arr[256];"),则sizeof运算符将返回1024(数组长度*sizeof(int)).
有没有办法在C中找出动态分配内存的大小?
例如,之后
char* p = malloc (100);
Run Code Online (Sandbox Code Playgroud)
有没有办法找出与之相关的内存大小p?
我有一个缓冲区,想要做一个测试,看看缓冲区是否有足够的容量,我可以找到我可以添加到缓冲区的元素数量.
char *buffer = (char *)malloc(sizeof(char) * 10);
Run Code Online (Sandbox Code Playgroud)
做一个
int numElements = sizeof(buffer);
Run Code Online (Sandbox Code Playgroud)
不回10,有关如何实现这一点的任何想法?
在这种情况下,我遇到了一些问题,请您提出您的想法。
main()
{
char *p=NULL;
p=(char *)malloc(2000 * sizeof(char));
printf("size of p = %d\n",sizeof (p));
}
Run Code Online (Sandbox Code Playgroud)
在此程序中,它打印4那个(char *)值,但是我需要为此分配多少字节。