我正在用 C 语言编写代码。
我收到以下变量作为参数int** list
。
我像这样分配内存:
list = (int **)malloc(sizeof(int) * numberOfItems);
我正在循环另一个列表,我想向 list
变量添加一个整数。这是我的代码:
*list[i] = i;
我收到以下错误:
[1] 18404 segmentation fault program
我做错了什么?
最佳答案
虽然在 C++ 中是必要的,但在 ANSI C 中没有必要 ( nor suggested ) 强制转换 [m][c][re]alloc
的返回值。所以你的第一个语句应该是:(注意 sizeof
语句的参数...)
list = malloc(sizeof(* list) * numberOfRows);//create the first level of array of pointers
然后循环遍历,如您在帖子中所示,为第一个语句中创建的每个位置分配内存:
for(i=0;i<numOfRows;i++)
{
list[i] = malloc(sizeof(int));
}
注意:为了感谢 @M.M 的评论,虽然没有必要或通常建议(阅读上面的链接)在 C 中强制转换 malloc 的返回值,但您在原始帖子中提供的示例代码提供了一个很好的说明,其中使用转换聚光灯并立即暴露出错误的可能性。即强制转换:(int **)
与 sizeof
的参数:int
不匹配。
关于c - 如何将 int 添加到 int** ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36392087/