问题描述
- 为什么malloc函数free时出错
-
菜鸟求解答
好像是什么越界使用了申请内存,还有为什么指针指向NULL后还是显示错误的指针代码
#include
#include
#define NULL 0
using namespace std;
int main(void)
{
int N;
cout<<"请输入将要输入的字符串个数"<
scanf("%d",&N);
char **p=(char **)malloc(sizeof(char *)*N);
int j,k;
for(j=0;j
*(p+j)=NULL;
void input(char **,int);
input(p,N);
void sort(char **,int);
sort(p,N);
cout
for(j=0;j
cout
for(k=0;k
{
free(*(p+k));
*(p+j)=NULL;
}
free(p);
p=NULL;
return 0;
}
void input(char **p,int N)
{
int i;
char temp[80];
cout
for(i=0;i
{
cin>>temp;
p[i]=(char )malloc(strlen(temp)+1);
strcpy(p[i],temp);
}
return;
}
void sort(char **p,int N)
{
int i,k,a=2;
char *temp=NULL;
for(i=N-1;i>=1;i--) //冒泡排序
{
for(k=0;k<=i-1;k++)
{
if(strcmp((p+k),*(p+k+1))>0)
{
temp=*(p+k);
(p+k)=(p+k+1);
*(p+k+1)=temp;
}
}
}
return;
}
解决方案
设置断点单步调试一下
解决方案二:
2333,发现了把k打成了j,简直了
解决方案三:
还有一个问题要注意,函数的参数传入指针的指针,也只能修改一个指针的值。要修改一个指针数组,传入一个指向指针的指针,可能会有问题哦。
所以,建议单步调试,看看从函数中传出的指针值是否是正确的。
指向 NULL 的指针,本身就是错误的指针。所以显示是正确的。