Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将int添加到int**?_C_Pointers_Segmentation Fault_Int - Fatal编程技术网

C 如何将int添加到int**?

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

我在用C语言编码

我正在接收以下变量作为参数
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;i
list
是一个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));
}