C 如何将int添加到int**?
我在用C语言编码 我正在接收以下变量作为参数C 如何将int添加到int**?,c,pointers,segmentation-fault,int,C,Pointers,Segmentation Fault,Int,我在用C语言编码 我正在接收以下变量作为参数int**list 我是这样分配内存的: list = (int **)malloc(sizeof(int) * numberOfItems); 我正在遍历另一个列表,我想向列表变量添加一个整数。这是我的密码: *list[i] = i; 我得到以下错误: [1] 18404 segmentation fault program 我做错了什么?正如@FiddlingBits指出的那样,我的分配方法不正确 以下是修复方法: int *wor
int**list
我是这样分配内存的:
list = (int **)malloc(sizeof(int) * numberOfItems);
我正在遍历另一个列表,我想向列表
变量添加一个整数。这是我的密码:
*list[i] = i;
我得到以下错误:
[1] 18404 segmentation fault program
我做错了什么?正如@FiddlingBits指出的那样,我的分配方法不正确 以下是修复方法:
int *workList = (int *)malloc(sizeof(int) * hardworkingDwarfCount);
list = &workList;
以及:
虽然C++中是必需的,但在ANSI C中不需要()返回<代码> [[M] [C] [Re] OLC/<代码>,所以您的第一个语句应该是:(注意<代码> sisioof < /Cord>语句…)< /P> 然后,如您在文章中所指出的,循环为第一条语句中创建的每个位置分配内存:
for(i=0;i<numOfRows;i++)
{
list[i] = malloc(sizeof(int));
}
用于(i=0;ilist
是一个2D数组。您没有为它正确分配内存。若要添加到@FiddlingBits注释:请参见您错过的示例,**
指向指针,而不是int
,因此,sizeof*
。此外,循环。@FiddlingBits:int**
不是2D数组,不能用作一个!指针可用二维数组的值为int(*)[COLS]
不要在C中使用malloc
&friends或void*
的结果!如果list
是一个函数参数,那么编写list=
是一个错误,看起来是可行的。要通过list
访问工作列表
数组,您需要执行类似(*list)[i]
或列表[0][i]
,对吗?@FiddlingBits:No!工作列表
是指向int
的指针,因此要访问使用常规索引的每个元素:工作列表[i]
@FiddlingBits:很公平。我仍然希望看到一个来自OP的问题。如果没有这个问题,这个问题对其他用户几乎没有用处。不过,cast有助于防止错误。使用(int**)malloc(sizeof(int)
我们可以立即看到有一个bug。如果返回类型错误,那么编译器会找到bug。如果OP编写了list=malloc(sizeof(int)
那么它就不那么明显了。如果你建议不要强制转换,那么你也应该建议使用list=malloc(sizeof*list
,这样我们也可以看到没有错误。您的建议是3个选项中最差的,really@M.M-我非常同意sizeof*list
。我没有指出这是一个错误。但是,我不同意强制转换malloc()的输出
在ANSI C中通常是一个好主意。尽管您在本例中指出了一个很好的理由,即演员阵容,但这可能是事情没有进展的直接线索。但是您知道,关于演员阵容的永恒争论malloc()
而且C中的家族仍然健在。我站在论点的一边,认为有更多邪恶的角色(仅适用于C)当然不是。不过我还是为你的第一个建议做了编辑。谢谢。根据我的经验,类型不匹配错误比C99之前的错误要常见得多。@M.M-我仍然在密切关注这些参数。你的C99之前的澄清很有意思。我会看看这一点。我从C99和更新版本出现以来一直在使用它们对我有用。
list = malloc(sizeof(* list) * numberOfRows);//create the first level of array of pointers
for(i=0;i<numOfRows;i++)
{
list[i] = malloc(sizeof(int));
}