关闭程序出现崩溃(exe 已触发了一个断点)

今天碰到一个奇怪的问题,数组下标也没有出现溢出的情况,但是就是在调试的时候崩在return 0

上。

#include<stdio.h>
#include<malloc.h>
#include<assert.h>
struct MM{
	char name[20];
	int age;
};
struct Data {
	MM mmData;
	int index;
};
typedef struct sqList {
	Data* pMemory;
	int Cursize;
	int MAX;
}*SQL;
SQL CreateSQL() {
	SQL sqlist = (SQL)malloc(sizeof(sqList));
	assert(sqlist);
	sqlist->MAX = 3;
	sqlist->pMemory = (Data*)malloc(sizeof(Data) * sqlist->MAX);
	assert(sqlist->pMemory);
	sqlist->Cursize = 0;
	return sqlist;
}
bool temp(SQL sqlist) {
	return sqlist->Cursize == 0;
}
void rellocMemory(SQL sqlist,int newSize) {
	void* p=(Data*)realloc(sqlist->pMemory, sizeof(Data)*newSize);
	assert(p);
}
void insertSQlist(SQL sqlist,Data data) {
	if (sqlist->Cursize+1== sqlist->MAX) {
		rellocMemory(sqlist, sqlist->MAX*2);
		sqlist->MAX *= 2;
	}
	sqlist->pMemory[sqlist->Cursize] = data;
	for (int i = sqlist->Cursize; i > 0; i--) {
		if (sqlist->pMemory[i - 1].index > sqlist->pMemory[i].index) {
			int tempData = sqlist->pMemory[i].index;
			sqlist->pMemory[i].index = sqlist->pMemory[i - 1].index;
			sqlist->pMemory[i - 1].index = tempData;
		}
		else {
			break;
		}
	}
	sqlist->Cursize++;
}
void deleteSqList(SQL sqlist,int index) {
	int pos = -1;
	for (int i = 0; i < sqlist->Cursize; i++) {
		if (sqlist->pMemory[i].index == index) {
			pos = i;
			break;
		}
	}
	if (pos ==-1)
		return;
	for (int i = pos; i < sqlist->Cursize-1; i++) {
		sqlist->pMemory[i] = sqlist->pMemory[i + 1];
	}
	sqlist->Cursize--;
 }
void deleteSortIndex(SQL sqlist, int sortIndex) {
	if (sortIndex > sqlist->Cursize - 1||sortIndex<0) {
		return;
	}
	for (int i = sortIndex-1; i < sqlist->Cursize-1; i++) {
		sqlist->pMemory[i] = sqlist->pMemory[i + 1];
	}
	sqlist->Cursize--;
}
void printSqList(SQL sqlist) {
	printf("序号\t姓名\t年龄\n");
	for (int i = 0; i <sqlist->Cursize; i++) {
		printf("%d\t%s\t%d\n", sqlist->pMemory[i].index, sqlist->pMemory[i].mmData.name, sqlist->pMemory[i].mmData.age);
	}
}
int main() {
	SQL sqlist = CreateSQL();
	Data data[5] = { "小明",18,5,"小红",19,3,"小刚",17,4,"小米",20,1,"小芳",16,9 };
	for (int i = 0; i < 5; i++)
		insertSQlist(sqlist, data[i]);
	printSqList(sqlist);
	deleteSortIndex(sqlist, 3);
	printSqList(sqlist);
	return 0;
}

后来把realloc的返回值赋值给sqlist->pMemory(所要重新申请内存的那个指针本身)程序就正常运行了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值