相同的两个代码,但仍然其中一个在c [代码块] - [VS2010]中有错误

时间:2014-02-02 10:11:37

标签: c visual-studio-2010 codeblocks

我编写了一个代码,它在CodeBlocks 13.12中完美编译,没有错误! 我将相同的代码复制到VS2010,显示1错误:

IntelliSense: identifier "malloc" is undefined  

CodeBlocks代码:

#include <stdio.h>
#define maxLength 4
typedef short int *set;

void func(set *a)
{
    *a=malloc(maxLength*sizeof(set));
    (*a)[0]=10;
    (*a)[1]=13;
    (*a)[2]=15;
}

void main()
{
    set a;
    func(&a);
    printf("%d %d %d",a[0],a[1],a[2]);

}

VS2010代码:

#include "stdafx.h"
#include <stdio.h>

#define maxLength 4
typedef short int *set;

void func(set *a){
         *a=malloc(maxLength*sizeof(set));
               (*a)[0]=10;
               (*a)[1]=13;
               (*a)[2]=15;
}

int _tmain(int argc, _TCHAR* argv[])
{
    set a;
    func(&a);
    printf("%d %d %d",a[0],a[1],a[2]);
    return 0;
}

我不知道是什么问题.. 如果我添加预编译代码:#include <iostream> 错误消失了,但出现了另一个错误:

IntelliSense: a value of type "void *" cannot be assigned to an entity of type "set"    

新代码

void func(set *a){
    func(a);
}

void func1(set *a){
        *a=reinterpret_cast<set>(malloc(maxLength*sizeof(set)));
               (*a)[0]=10;
               (*a)[1]=13;
               (*a)[2]=15;
}

如何在函数调用的函数中创建数组?

2 个答案:

答案 0 :(得分:1)

你似乎有两个问题。第一个也是最严重的是你错过了一个头文件。参见例如this malloc reference。不包括此头文件将导致您的内存分配现在按预期工作。

另一个错误是你实际上似乎在使用C ++而不是C. In C you should not cast the return of malloc,但在C ++中你必须这样做。

答案 1 :(得分:0)

您应该添加一个定义malloc函数的头文件:stdlib.h(C)或cstdlib(C ++)。