如何解决我在 Visual Studio 中的 C 代码显示调试错误
这是我编写的 C 编程代码。当我运行此代码时,它显示调试错误,可视化代码也显示此警告。
Warning 6385 Reading invalid data from 'my_newarray': the readable size is '4' bytes,but '8' bytes may be read.
我的代码是:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n;
printf("enter the size of an array: ");
scanf_s("%i",&n);
int my_array[] = { calloc((n + 1),sizeof(int)) };
int my_newarray[] = { calloc((n + 1),sizeof(int)) };
printf("enter only 0s and 1s n times:\n");
for (int i = 0; i < n; i++)
{
scanf_s("%i",&my_array);
}
for (int j = 0; j < n; j++)
{
if (my_array[j] > my_array[j + 1])
{
my_array[j] = my_newarray[j + 1];
}
}
for (int k = 0; k < (n+1); k++)
{
printf("%i\n",my_newarray[k]);
}
free(my_array);
free(my_newarray);
}
解决方法
这些声明
int my_array[] = { calloc((n + 1),sizeof(int)) };
int my_newarray[] = { calloc((n + 1),sizeof(int)) };
不正确。事实上,您正在尝试创建元素类型为 int
的数组,这些数组具有由调用 calloc 返回的 void *
类型的值初始化的单个元素。
你需要像这样声明指针
int *my_array = calloc((n + 1),sizeof(int));
int *my_newarray = calloc((n + 1),sizeof(int));
还有这个电话
scanf_s("%i",&my_array);
不正确。看来你的意思是
scanf_s("%i",&my_array[i]);
或
scanf_s("%i",my_array + i);
也就是说,除了最后一个已经通过调用 calloc
初始化为零的元素之外,您需要填充已分配数组的元素。
还有这个任务
my_array[j] = my_newarray[j + 1];
和下面的循环
for (int k = 0; k < (n+1); k++)
{
printf("%i\n",my_newarray[k]);
}
没有多大意义,因为数组 my_newarray
的所有元素都通过调用 calloc 进行了零初始化。所以你可以写
my_array[j] = 0;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。