读书人

malloc 函数 跟 strcpy

发布时间: 2013-02-27 10:48:11 作者: rapoo

malloc 函数 和 strcpy
现有以下代码:



#include <string.h>
#include <stdlib.h>
#include <malloc.h>
char** fillContent(char **content,unsigned int size)
{
unsigned int P_maxLen=0;
char **context=(char **)malloc(size*30*sizeof(char));
if(context!=NULL)
{
for(unsigned int i=0;i<size;i++)
{
strcpy(context[i],content[i]);
if(strlen(content[i])>P_maxLen)
P_maxLen=strlen(content[i]);
}
}

return context; //注意free()函数自行添加
}


执行到strcpy处程序崩溃。
不知是何原因,求指教!

自己在找原因时又写了以下代码:

/*
* main.C
*
* Created on: 2013-2-18
* Author:
*/
#include <malloc.h>
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;

int main()
{
char **as=(char **)malloc(2*30*sizeof(char));
if(as!=NULL)
{
char b[][20]={"asdf","adfdff"};
for(int i=0;i<2;i++)
{
strcpy(as[i],b[i]);
cout<<as[i]<<endl;
}
}
for(int i=0;i<2;i++) cout<<as[i]<<endl;
free(as);
return 0;
}





这回又正常执行,不知为何。 指针
[解决办法]


#include <string.h>
#include <stdlib.h>
#include <malloc.h>
char** fillContent(char **content,unsigned int size)
{
unsigned int P_maxLen=0;
char **context=(char **)malloc(size*4);//
if(context!=NULL)
{
for(unsigned int i=0;i<size;i++)
{
context[i] = (char*)malloc(strlen(content[i]) + 1);//
strcpy(context[i], content[i]);
if(strlen(content[i])>P_maxLen)
P_maxLen=strlen(content[i]);
}
}

return context; //注意free()函数自行添加
}


你是是这样,我也是初学,错了不要骂我啊
[解决办法]
char** fillContent(char **content,unsigned int size)
{
unsigned int P_maxLen=0;
char **context=(char**)malloc(size*sizeof(char*));
for (int n=0; n<size;++n)
{
context[n] = (char *)malloc(30*sizeof(char));
}
if(context!=NULL)
{
for(unsigned int i=0;i<size;i++)
{
strcpy(context[i],content[i]);
if(strlen(content[i])>P_maxLen)
P_maxLen=strlen(content[i]);
}
}

return context; //注意free()函数自行添加
}

[解决办法]
LZ你那两种写法都是错的吧,全部崩溃,错误的原因是一级指针根本没分配内存

读书人网 >C++

热点推荐