为什么malloc函数free时出错

问题描述

为什么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 的指针,本身就是错误的指针。所以显示是正确的。

时间: 2025-01-02 18:46:16

为什么malloc函数free时出错的相关文章

c++ 编程问题-c++ 使用函数对象时出错

问题描述 c++ 使用函数对象时出错 我试图将一些二元操作函数放入一个function table中,但是会编译出错,请教一下大家这是什么问题? #include using namespace std; int add(int a, int b){return a+b;}; int main(){ map binops; binops.insert(make_pair("+",add)); return 0; }

labview+matlab-在Labview中调用Matlab程序时出错,错误提示Function函数无效

问题描述 在Labview中调用Matlab程序时出错,错误提示Function函数无效 请大神们帮帮忙,这个问题怎么解决啊? 解决方案 http://wenku.baidu.com/link?url=c_f-NBJBOaw_RveWarfinIctyj5GYUQlJagTkpE_eed4JkesENfgIO9JMUYs6uU9bW8onhml7JJ5eO2V80LcmS0GsnYdNwYGEzeUgACOguu

test-这是我写的快速排序的算法,为什么编译时出错并提示“swap函数应输入两个参数,却提供了3个”啊

问题描述 这是我写的快速排序的算法,为什么编译时出错并提示"swap函数应输入两个参数,却提供了3个"啊 求助!这是我写的快速排序的算法,为什么编译时出错并提示"swap函数应输入两个参数,却提供了3个"啊~~谢谢大家啦! #include using namespace std; inline int findpivot(int arr[],int i,int j){ return (i+j)/2; } inline int partition(int arr[]

用C语言实现数据结构的链表创建时出错

问题描述 用C语言实现数据结构的链表创建时出错 请教大家,下面的程序哪里有错啊?十分感谢 #include "stdio.h" #include "malloc.h" #include "stdlib.h" #define NULL 0 #define OK 1 typedef int ElemType; typedef int Status; typedef struct LNode{ ElemType data; struct LNode *

关于哈夫曼编码的程序运行时出错,我分析是由于cd定义出现了问题,导致后边cd[--start]出错

问题描述 关于哈夫曼编码的程序运行时出错,我分析是由于cd定义出现了问题,导致后边cd[--start]出错 void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int n){ //w存放n个字符的权值(均>0),构造赫夫曼树 HT,并求出n个字符的赫夫曼编码 HC printf("123"); system("pause"); int s1,s2,i,start; int f=0

c/c++基础--malloc函数

原型:extern void *malloc(unsigned int num_bytes); 用法:#include <malloc.h> 或#include <stdlib.h> 功能:分配长度为num_bytes字节的内存块 说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL. 当内存不再使用时,应使用free()函数将内存块释放. malloc的语法是:指针名=(数据类型*)malloc(长度),(数据类型*)表示指针. [编辑本段]malloc()函数的

c-使多个数移位输出,应用指针时出错,求解

问题描述 使多个数移位输出,应用指针时出错,求解 要达到的目的是输入n = 5, a = {1,2,3,4,5},m = 3时能输出 4 5 1 2 3 可在对指针所指的值赋值时出错,是语法问题吗?代码见下: /*移位m个整数*/ #include <stdio.h> #include <stdlib.h> int* a = 0, *a1 = 0; int* move(int* a,int n,int m); int main() { int n; printf("Ple

UDT协议在连接对端时出错(UDT4.11 connect)

问题描述 UDT协议在连接对端时出错(UDT4.11 connect) 本人最近在研究UDT协议,想用它写一个Windows下运行的客户端,用c++编写,在写完测试时发现个问题,随后用UDE demo测试发现问题依然存在.(非Rendezvous模式) 运行环境: Win7 VS2010 UDT版本4.11 问题描述: 因为是一个长期运行的程序,修改UDT demo recvfile.cpp 使它循环发送,不退出 对connect做如下处理 if (UDT::ERROR == UDT::conn

adb-VS2010用C#将数据库里的数据读出并显示到界面时 出错,求各位老师帮忙

问题描述 VS2010用C#将数据库里的数据读出并显示到界面时 出错,求各位老师帮忙 private void listView_shipinfo_MouseClick(object sender, MouseEventArgs e) { string des_string = lvselecteditem(); SqlConnection Conn = new SqlConnection(); Conn.ConnectionString = "Server=Localhost;" +