gpt4 book ai didi

c - 我的 malloc 数组是否更改了意外的值?

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

这可能是因为我是菜鸟,但是......

我正在尝试使用动态分配的二维数组。我按照显示的方法 here他们使用大小为“行 x 列”的单维数组进行变通。

当我做一些测试时,我用数字 2 填充数组的所有位置,然后我一直在访问单个位置并将它们更改为 9 只是为了查看 A(1)、A(2) )、A(3) 等将与单一维度有关。

一切都按预期进行,直到我尝试修改 A[5],当我这样做时,数组的两个位置被覆盖,而不是仅仅 5 个。对发生的事情有什么想法吗?

顺便说一句,通过“A[5] 和 A[4]”与“*(A+5) 和 *(A+4)”寻址数组的位置会得到相同的结果。

感谢您的帮助! :)

这个:

int main()
{
int dim1, dim2, row, column, i=0;
scanf("%d",&dim1);
scanf("%d",&dim2);
printf("dim1=%d dim2=%d\n", dim1, dim2);

int *A;
A=(int* )malloc(dim1*dim2*sizeof(int));
for(row=0; row<dim1; row++)
{
for(column=0; column<dim2; column++)
{
A[(row*dim1)+column]=2;
i++;
}
}
printf("Before assignment\n");
*(A+5)=9;//<<<<<<<-THIS IS WHERE I AM ACCESSING THE ARRAY
printf("after assignment\n");


for(row=0; row<dim1; row++)
{
for(column=0; column<dim2; column++)
{
printf("%d ", A[(row*dim1)+column]);
}
printf("\n");
}

结果: Accessing A[5]

但是这个:

int main()
{
int dim1, dim2, row, column, i=0;
scanf("%d",&dim1);
scanf("%d",&dim2);
printf("dim1=%d dim2=%d\n", dim1, dim2);

int *A;
A=(int* )malloc(dim1*dim2*sizeof(int));
for(row=0; row<dim1; row++)
{
for(column=0; column<dim2; column++)
{
A[(row*dim1)+column]=2;
i++;
}
}
printf("Before assignment\n");
*(A+4)=9;//<<<<<<<-THIS IS WHERE I AM ACCESSING THE ARRAY
printf("after assignment\n");


for(row=0; row<dim1; row++)
{
for(column=0; column<dim2; column++)
{
printf("%d ", A[(row*dim1)+column]);
}
printf("\n");
}

结果: Accessing A[4]

最佳答案

这是错误的地址。

A[(row*dim1)+column]=2;
^^^^

这个dim1应该是dim2

A[(row*dim2)+column]=2;

回想一下,dim1 是行数,dim2 是列数。将它们命名为 nrowsncols 或其他一些描述性名称可能会有所帮助。

A[(row*ncols)+column]=2;

关于c - 我的 malloc 数组是否更改了意外的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52959565/

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