微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我在 Visual Studio 中的 C 代码显示调试错误

如何解决我在 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 举报,一经查实,本站将立刻删除。