c堆栈变量​​已损坏

Jor*_*sov 0 c stack

我已经阅读了所有关于此类问题的问题,但我无法修复我的问题.问题是我使用一个函数从文件中读取数据,我得到这个错误:"堆栈变量'p'被破坏了"这是函数

Firm readFirm(char* name)
{
FILE* file = NULL;
int i = 0;
Firm firm;
char line[100];
char* p[5] = {(char*)malloc(50)};

char tmp[50];
strcpy(tmp,name);
strcat(tmp,".txt");
file = fopen(tmp,"rb");

getline(file,line,100);
strcpy(firm.name,line);
getline(file,line,100);
strcpy(firm.EIK,line);
getline(file,line,100);
split(p,line," ");
for (i = 0 ; p[i] != NULL; i++)
    firm.price[i] = atoi(p[i]);
getline(file,line,100);

split(p,line,".");
firm.day = atoi(p[0]);
firm.month = atoi(p[1]);
firm.year = atoi(p[2]);
fclose(file);
return firm;

}
Run Code Online (Sandbox Code Playgroud)

请帮助,因为我不知道如何解决它!

这是拆分功能:

char ** split( char *result[], char *w, const char *delim)
{
int i=0;
char *p=NULL;
for(i=0, result[0]=NULL, p=strtok(w, delim); p!=NULL; p=strtok(NULL, delim), i++ )
{
       result[i]=p;
       result[i+1]=NULL;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)

wal*_*lyk 5

声明char* p[5] = {(char*)malloc(50)};有问题.它导致p[1],p[2]p[3],并且p[4]被初始化为垃圾,最有可能的是,没有多少是NULL,这是循环测试的.

使用时也存在问题getline(),最明显的是参数的顺序错误且没有足够的间接性.