此代码中存在错误,但我找不到它

时间:2017-01-08 03:37:41

标签: c debugging

我正在准备面试并遇到一个我无法弄清楚的练习题。这是代码:

#include <stdio.h>

int main()
{
    char *p,*q;
    p=(char *)malloc(25);
    q=(char *) malloc(25);
    strcpy(p,"amazon" );
    strcpy(q,"hyd");
    strcat(p,q);
    printf("%s\n",p);
}

我编译并执行它,但它工作得很好。代码存在问题,这使我怀疑它与未初始化的变量有关。输出就像它应该的亚马逊水。有人能让我知道我错过了什么吗?

编辑:这是一个练习面试问题,问题是在这段代码中询问有什么问题。

1 个答案:

答案 0 :(得分:5)

缺少包含。

malloc函数需要stdlib.h,而strcpystrcat需要string.h。没有它们,假定这些函数在int中返回。

如果malloc sizeof(int) != sizeof(void *),这尤其成问题。由于隐含定义与实际定义不匹配,因此您调用undefined behavior。未定义行为表现出来的方法之一是该程序似乎正常工作。但是,这种行为无法保证。

要使程序符合要求,请在顶部添加以下内容。

#include <stdlib.h>
#include <string.h>

此外,此程序分配内存但不free。每次拨打malloc都应该对free进行相应的调用。否则,您有内存泄漏。

在调用printf之后添加以下内容以修补内存泄漏。

free(p);
free(q);