如何将int添加到int **?

时间:2016-04-03 22:36:47

标签: c pointers segmentation-fault int

我在C编码。

我收到以下变量作为参数int** list

我正在分配这样的内存:

list = (int **)malloc(sizeof(int) * numberOfItems);

我正在循环浏览另一个列表,我想在list变量中添加一个整数。这是我的代码:

*list[i] = i;

我收到以下错误:

[1]    18404 segmentation fault  program

我做错了什么?

2 个答案:

答案 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;