小编Pra*_*har的帖子

C语言中的以下代码有什么问题?

我观察到int *x = malloc(sizeof(int));这个代码正在尝试将void*转换为int*而不使用正确的类型转换.所以,根据我的答案应该是选择一个.但是在官方的GATE-2017考试答案中,答案是给予D.所以我错了吗?怎么样 ?

#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>

int *assignval(int *x, int val){
  *x = val;
  return x;
}

void main(){
    clrscr();
    int *x = malloc(sizeof(int));
    if(NULL==x) return;
    x = assignval(x,0);
    if(x){
        x = (int *)malloc(sizeof(int));
        if(NULL==x) return;
        x = assignval(x,10);
    }
    printf("%d\n",*x);
    free(x);
    getch();
}
Run Code Online (Sandbox Code Playgroud)
  • (A)编译器错误,因为malloc的返回没有适当地进行类型转换.
  • (B)编译器错误,因为比较应该是x == NULL而不是如图所示.
  • (C)编译成功但执行可能导致悬空指针.
  • (D)编译成功但执行可能导致内存泄漏.

在我看来,选项D只在int *x = (int *)malloc(sizeof(int));使用时才是正确的.

c pointers

0
推荐指数
1
解决办法
189
查看次数

标签 统计

c ×1

pointers ×1