我在C编码。
我收到以下变量作为参数int** list
。
我正在分配这样的内存:
list = (int **)malloc(sizeof(int) * numberOfItems);
我正在循环浏览另一个列表,我想在list
变量中添加一个整数。这是我的代码:
*list[i] = i;
我收到以下错误:
[1] 18404 segmentation fault program
我做错了什么?
答案 0 :(得分:1)
虽然在C ++中是必需的,但是没有必要( this )在ANSI C中强制转换[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
:[{1}}的参数不匹配。
答案 1 :(得分:0)
正如@FiddlingBits指出的那样,我的分配方法不正确。
以下是修复:
X =
0 1 2 3 4 5 6 7 8 9
0 10 18 3 5 2 6 4 0 7
并且:
int *workList = (int *)malloc(sizeof(int) * hardworkingDwarfCount);
list = &workList;