相关疑难解决方法(0)

如何从C中的指针获取数组的大小?

我已经分配了一个像这样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,但如果可能,我宁愿不这样做.有任何想法吗?

c malloc pointers memory-management

66
推荐指数
4
解决办法
4万
查看次数

有没有办法以编程方式确定C++数组的大小?如果没有,为什么?

这个问题的灵感来自一个类似的问题: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++ arrays pointers memory-management

61
推荐指数
4
解决办法
6万
查看次数

确定C中动态分配的内存的大小

有没有办法在C中找出动态分配内存的大小?

例如,之后

char* p = malloc (100);
Run Code Online (Sandbox Code Playgroud)

有没有办法找出与之相关的内存大小p

c memory size allocation dynamic

56
推荐指数
6
解决办法
7万
查看次数

如何确定分配的C缓冲区的大小?

我有一个缓冲区,想要做一个测试,看看缓冲区是否有足够的容量,我可以找到我可以添加到缓冲区的元素数量.

char *buffer = (char *)malloc(sizeof(char) * 10);
Run Code Online (Sandbox Code Playgroud)

做一个

int numElements = sizeof(buffer); 
Run Code Online (Sandbox Code Playgroud)

不回10,有关如何实现这一点的任何想法?

c malloc buffer buffer-overflow

10
推荐指数
4
解决办法
5万
查看次数

为什么C中没有"memsize",它返回使用malloc在堆中分配的内存块的大小?

好.它可以在Visual Studio 中的_msize中调用.

但是为什么在使用malloc分配内存块的情况下,返回内存大小并不符合标准?因为我们无法判断malloc后面的返回指针指向了多少内存,所以我们可以使用这个"memsize"调用来返回我们需要的信息."memsize"将是特定于实现的,因为malloc/free

只是问,因为我必须在某个时候写一个包装器来存储大小的一些额外字节.

c memory-management

5
推荐指数
1
解决办法
3590
查看次数

我怎么知道c中的指针变量分配的内存大小

在这种情况下,我遇到了一些问题,请您提出您的想法。

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 *)值,但是我需要为此分配多少字节。

c size malloc pointers memory-management

4
推荐指数
2
解决办法
3万
查看次数