malloc导致崩溃后为数组赋值

时间:2014-11-29 15:26:41

标签: c++ c arrays 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(&#34;%d&#34;,x [i]);但没有任何作用。每次在输入X数组后按Enter键都会导致程序崩溃。顺便说一下,最初没有fflush(stdin),我添加了它们因为我认为输入将\ 0作为其中一个值并且创建了错误。

感谢您的阅读! :)

3 个答案:

答案 0 :(得分:2)

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

看一下这个答案what is the use of fflush(stdin) in c programming

答案 1 :(得分:2)

代码中有一堆错位的括号和括号,尤其是在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)

答案 2 :(得分:0)

我尝试使用Visual Studio 2013编译程序,并在malloc的行中出现2个错误: 错误C2440:&#39; =&#39; :无法转换为&#39; bool&#39;到&#39; int *&#39; 在我通过

修复两行之后
 if ((x = (int*)malloc(sizeof(int) * n)) == NULL){

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

程序运行没有任何问题。

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

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