我编写了一个代码,它在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;
}
如何在函数调用的函数中创建数组?
答案 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 ++)。