gpt4 book ai didi

c - 以下C语言代码有什么问题?

转载 作者:太空宇宙 更新时间:2023-11-04 06:17:18 26 4
gpt4 key购买 nike

我观察到在 int *x = malloc(sizeof(int)); 行中,这段代码试图在不使用正确类型转换的情况下将 void* 转换为 int*。所以根据我的说法,答案应该是选项 A。但是在 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();
}
  • (A) 编译器错误,因为 malloc 的返回不是类型转换适本地。
  • (B) 编译器错误,因为比较应该作为 x==NULL而不是如图所示。
  • (C)​​ 编译成功但执行可能会导致悬空指针。
  • (D) 编译成功但执行可能会导致内存泄漏。

In my opinion option D is only correct when int *x = (int *)malloc(sizeof(int)); is used.

最佳答案

所提供的选项中没有正确答案。

假设代码应该是用标准 C 编写的,那么代码的明显问题:

  • 标准库没有<conio.h> header 或 <iostream.h> header 。

  • void main()是非法的。应该是int main() .更好int main(void)

  • clrscr() , getch() - 标准库不知道这样的函数。

  • 第二个malloc泄漏第一个分配的内存(假设第一个成功)。

  • 第二个结果malloc显式转换 - 糟糕且不必要的做法。

关于c - 以下C语言代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42804367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com