gpt4 book ai didi

c - 在 C 中使用 calloc 的二维数组 unsigned char 中的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:58:21 25 4
gpt4 key购买 nike

我正在尝试使用 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 作为迭代器有关?

最佳答案

这句话有错别字。而不是 sizeof( unsigned char ) 你必须使用 sizeof( unsigned char * )

newmatriz = (unsigned char**) calloc(width, sizeof(unsigned char *));
^^^^^^

另外这个if语句不正确

if ( newmatriz[j] = calloc(witdh, sizeof(unsigned char) ) == NULL){

在此语句中,newmatriz[j] 根据内存分配是否成功设置为 1 或 0。

我想你的意思是

if ( ( newmatriz[j] = calloc(witdh, sizeof(unsigned char) ) ) == NULL){

还有这些循环

for (i=0;i<width;i++)
{
for(j=0;j<width;j++)
{
newmatriz[i][j] = 0;
}
}

没有意义,因为 calloc 已经用零初始化分配的内存。

关于c - 在 C 中使用 calloc 的二维数组 unsigned char 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30625807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com