【发布时间】:2015-08-18 00:00:24
【问题描述】:
我正在尝试使用 calloc 分配unsigned char**:
newmatriz = (unsigned char**) calloc(width, sizeof(unsigned char));
for (j=0 ; j < width; j++)
{
if (newmatriz[j]=(unsigned char*)calloc(witdh, sizeof(unsigned char)) == NULL){
printf("Memory allocation error. Exit program\n");
exit(1);
}
}
for (i=0;i<width;i++)
{
for(j=0;j<width;j++)
{
newmatriz[i][j] = 0;
}
}
但是当我尝试访问 pos [i][j] 时出现分段错误
问题是否与使用 int 作为迭代器有关?
【问题讨论】:
-
应该是
newmatriz=calloc(width, sizeof(unsigned char*)) -
不要不像
calloc()&friends返回的那样转换void *。另外:不要使用sizeof(char)(签名/未签名相同)。这永远不会与 1 不同,因为这是标准明确定义的。 -
代码缺少星号(参见 BLUEPIXY 的评论)。投票结束是一个错字。
-
我从 calloc 中删除了强制转换,实际上仍然得到相同的错误,我在编译时收到此警告:filtrodefinitivo.c:298:29: 警告:赋值使指针从没有强制转换的整数 [启用默认情况下] if (newmatriz[j]=calloc(width, sizeof(unsigned char)) == NULL){
-
@user3055867,这是不显式转换
malloc系列函数的返回值的一个很好的理由。您使用显式强制转换隐藏了一个问题。
标签: c arrays char unsigned calloc