C 检查已分配内存的大小

C 检查已分配内存的大小,c,dynamic-allocation,C,Dynamic Allocation,我正在编写一个程序,它接受数组的大小作为参数,然后动态地为该大小分配内存 我希望我的程序返回分配的内存大小。 目前,我使用argv读取输入值,然后使用mmap进行动态分配。我还使用for循环来显示数组的每个索引中保存的数字 我知道可以用malloc完成分配,但我不能使用它。 我想我需要从最后一个元素开始,检查所有单元,直到得到SEGFAULT信号 谢谢你的帮助 编辑: 没有库的短代码等 input = (atoi(argv[1])); int* arr = mmap(0, input, PROT

我正在编写一个程序,它接受数组的大小作为参数,然后动态地为该大小分配内存

我希望我的程序返回分配的内存大小。 目前,我使用argv读取输入值,然后使用mmap进行动态分配。我还使用for循环来显示数组的每个索引中保存的数字

我知道可以用malloc完成分配,但我不能使用它。 我想我需要从最后一个元素开始,检查所有单元,直到得到SEGFAULT信号

谢谢你的帮助

编辑: 没有库的短代码等

input = (atoi(argv[1]));
int* arr = mmap(0, input, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, fd, 0);

for (i = 0; i < input; i++) {
    arr[i] = i + 1; 
}


您不能在C中检查分配的空间量或检查数组的大小。您需要自己将其显式保存为变量。

您无法检查C中分配的空间量或数组大小。您需要自己将其显式保存为变量。

为什么您不能使用malloc?请检查所有单元格,直到得到SEGFAULT。那在我看来很不可靠。你怎么能保证一个SEGFAULT?@CherubimAnand Editted.@Someprogrammerdude目前没有崩溃,我得到了所有的值,但我不知道如何得到分配的mem.XY问题的大小和非常错误的方法。不清楚你试图解决什么问题,但挑起未定义的行为显然是错误的。这就像在墙上钉钉子,直到产生火花,试图在墙上找到电线一样。别再走那条路了!使用malloc分配内存有什么问题?你应该提供更多的细节和答案。为什么你不能使用malloc?检查所有单元格,直到我得到错误。那在我看来很不可靠。你怎么能保证一个SEGFAULT?@CherubimAnand Editted.@Someprogrammerdude目前没有崩溃,我得到了所有的值,但我不知道如何得到分配的mem.XY问题的大小和非常错误的方法。不清楚你试图解决什么问题,但挑起未定义的行为显然是错误的。这就像在墙上钉钉子,直到产生火花,试图在墙上找到电线一样。别再走那条路了!使用malloc分配内存有什么问题?你应该提供更多的细节和一个。所以使用mmap我不能检查分配了多少内存?使用mmap是否更有效?或者可以使用mmap?@F.Mark mmap或malloc解决此问题。问题相同。当你分配内存时,你知道你分配了多少内存,只需记下这个数字。就这样。句号。@MichaelWalz那么这可以通过存储内存的默认大小并将其与分配后的大小进行比较来解决吗?因为我想让我的程序像你分配的5MB内存一样打印出来。@F.Mark我不明白你的问题。分配的内存量在输入变量中。默认的内存大小是什么意思?没有这样的事情。@F.Mark如果您输入5,您只分配了5个字节,大约是0.000005 MB。您在阵列中存储的内容与使用mmap的大小无关我无法检查分配了多少内存?使用mmap是否更有效?或者可以使用mmap?@F.Mark mmap或malloc解决此问题。问题相同。当你分配内存时,你知道你分配了多少内存,只需记下这个数字。就这样。句号。@MichaelWalz那么这可以通过存储内存的默认大小并将其与分配后的大小进行比较来解决吗?因为我想让我的程序像你分配的5MB内存一样打印出来。@F.Mark我不明白你的问题。分配的内存量在输入变量中。默认的内存大小是什么意思?没有这样的事情。@F.Mark如果您输入5,您只分配了5个字节,大约是0.000005 MB。数组中存储的内容与大小无关