gpt4 book ai didi

c - 确定C中动态数组的结尾

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:00 25 4
gpt4 key购买 nike

我有一个用户定义的结构调用 MyStruct 并分配一个二维动态数组:

MyStruct** arr = (MyStruct**) malloc(sizeof(myStruct*)*size);

我想在函数中处理数组:

void compute(MyStruct** lst)
{
int index = 0;
while(lst[index] != NULL)
{
//do something
index++;
}
}

我调用compute(arr)它工作正常。但是 valgrind 提示有一个大小为 sizeof(MyStruct) 的无效读取。在 while(...) 行.我知道此时索引超出了 1 个元素的范围。一个简单的解决方法是通过 size到函数并检查是否 index < size通过循环。

出于好奇,无论如何我仍然可以遍历数组而不索引那个额外的元素并且不传递 size到功能?

最佳答案

没有标准的方法,没有。

也就是说,可能有一些非标准的方法可以让您获得分配给 malloc 的大小。编辑了一段内存。例如,我的机器有一个 size_t malloc_size(const void *); <malloc/malloc.h> 中发挥作用; glibc 有一个 malloc_usable_size具有相似签名的功能;微软的 libc 实现有一个 _msize 函数,也具有类似的签名。

但是,这些不能简单地放入;除了明显的可移植性问题外,它们还返回为您分配的实际内存量,可能比您请求的略多。这对于某些应用程序可能没问题,但可能不适用于遍历您的数组。

您可能应该将大小作为第二个参数传递。无聊,我知道。

关于c - 确定C中动态数组的结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28270892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com