【问题标题】:my C code in visual studio is showing debug error我在 Visual Studio 中的 C 代码显示调试错误
【发布时间】:2021-05-16 21:29:19
【问题描述】:

这是我编写的 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));,您不能将地址分配给 Array,您必须使用 Pointer,没有 {...}(大括号初始值设定项语法)需要。 (my_newarray 也一样)
  • 也总是 Validate 每个输入,例如if (scanf_s("%i", &amp;n) != 1) { /* handle error */ return 1; }

标签: c for-loop scanf dynamic-memory-allocation calloc


【解决方案1】:

这些声明

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;

【讨论】:

  • 你今晚很快我的朋友!
猜你喜欢
  • 2021-10-18
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多