在 malloc 之后为数组赋值会导致崩溃



我有一个关于 C 的小任务,但我无法接缝来填充我为其分配内存的数组。代码是这样的..

#include<stdio.h>
#include<stdlib.h>
int main(){
    int *x, *y, n, m, i;
    printf("Enter lenght of arrays x and y (separated by space): ");
    scanf("%d%d", &n, &m); fflush(stdin);
    if (x = (int*)malloc(sizeof(int) * n) == NULL){
        fprintf(stderr, "Error!n");
        exit(1);
    }
    if (y = (int*)malloc(sizeof(int) * m) == NULL){
        fprintf(stderr, "Error!n");
        exit(1);
    }
    printf("Enter %d values for X array (separated by space) ", n);
    for (i = 0; i < n; i++)
        scanf("%d", x + i);
    fflush(stdin);
    printf("Enter %d values for Y array (separated by space): ", m);
    for (i = 0; i < m; i++)
        scanf("%d", y + i);
    } //the two for's were originally in a function, I tried using the code like this as well
    return 0;
}

我也尝试运行scanf("%d",x[i]);但没有任何效果。每次我在输入 X 数组后按 Enter 时,程序都会崩溃。顺便说一下,最初没有 fflush(stdin),我添加了它们,因为我认为输入将 \0 作为值之一并产生了错误。

感谢您的阅读! :)

代码有一堆放错位置的大括号和括号,尤其是在 if 语句中。 在进行比较之前,您必须将作业括在括号中,否则它们会被错误分配。 试试这个,它编译并为我工作:

#include<stdio.h>
#include<stdlib.h>
int main(){
int *x, *y, n, m, i;
printf("Enter lenght of arrays x and y (separated by space): ");
scanf("%d%d", &n, &m);
if ((x = (int*)malloc(sizeof(int) * n)) == NULL){
    fprintf(stderr, "Error!n");
    exit(1);
}
if ((y = (int*)malloc(sizeof(int) * m)) == NULL){
    fprintf(stderr, "Error!n");
    exit(1);
}
printf("Enter %d values for X array (separated by space) ", n);
for (i = 0; i < n; i++)
    scanf("%d", x + i);
printf("Enter %d values for Y array (separated by space): ", m);
for (i = 0; i < m; i++)
    scanf("%d", y + i);
 //the two for's were originally in a function, I tried using the code like this as well
return 0;
}

就像其他人说的,不要使用fflush(stdin)

使用 fflush(stdin) 可能会导致崩溃,因为它在标准 C 中是未定义的行为。

看看这个答案 fflush(stdin) 在 c 编程中的用途是什么

我尝试使用 Visual Studio 2013 编译程序,但在使用 malloc 的行中出现 2 个错误:错误 C2440:"=":无法从"布尔值"转换为"整数 *"在我修复了两条线之后

 if ((x = (int*)malloc(sizeof(int) * n)) == NULL){

if (x = (int*)malloc(sizeof(int) * n)){

该程序运行没有任何问题。

我不明白为什么你可以编译代码,但它执行以下操作:

compare (int*)

malloc(sizeof(int) * n) == 空结果为假现在设置 y = false,y 不指向分配的数组。

相关内容

  • 没有找到相关文章

最新更新