问题描述:
运行时总是报写入权限冲突的bug
#include<stdio.h>
typedef struct MyLinkedList_t {
int val;
struct MyLinkedList_t* next;
} MyLinkedList;
MyLinkedList* myLinkedListCreate() {
MyLinkedList* obj = (MyLinkedList*)calloc(1, sizeof(MyLinkedList));
return obj;
}
int myLinkedListGet(MyLinkedList* obj, int index) {
if (index < 0 || obj->next == NULL) {
return -1;
}
int curr = 0;
MyLinkedList* listcurr = obj->next;
while (curr < index)
{
if (listcurr == NULL) {
return -1;
}
listcurr = listcurr->next;
curr++;
}
if (listcurr != NULL) {
return listcurr->val;
}
return -1;
}
void myLinkedListAddAtHead(MyLinkedList* obj, int val) {
MyLinkedList* newnode = (MyLinkedList*)malloc(sizeof(MyLinkedList));
newnode->val = val;
newnode->next = NULL;
if (obj->next == NULL) {
obj->next = newnode;
return;
}
else {
newnode->next = obj->next;
obj->next = newnode;
}
}
void myLinkedListAddAtTail(MyLinkedList* obj, int val) {
MyLinkedList* newnode = (MyLinkedList*)malloc(sizeof(MyLinkedList));
newnode->val = val;
newnode->next = NULL;
MyLinkedList* curr = obj;
while (curr->next != NULL) {
curr = curr->next;
}
curr->next = newnode;
}
void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val) {
if (index <= 0) {
myLinkedListAddAtHead(obj, val);
}
int curr = 0;
MyLinkedList* currnode = obj->next;
if (currnode != NULL) {
while (currnode->next != NULL) {
if (curr == index - 1) {
break;
}
currnode = currnode->next;
curr++;
}
if (index - 1 != curr) {
return;
}
MyLinkedList* newnode = (MyLinkedList*)malloc(sizeof(MyLinkedList));
newnode->val = val;
newnode->next = currnode->next;
currnode->next = newnode;
}
}
void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index) {
if (index < 0 || obj->next == NULL) {
return;
}
if (index == 0) {
obj->next = obj->next->next;
return;
}
MyLinkedList* currlist = obj->next;
int curr = 0;
while (currlist->next != NULL) {
if (curr == index - 1) {
break;
}
currlist = currlist->next;
curr++;
}
if (curr == index - 1 && currlist->next != NULL) {
currlist->next = currlist->next->next;
}
}
void myNodeFree(MyLinkedList* node) {
if (node->next != NULL) {
myNodeFree(node->next);
node->next = NULL;
}
free(node);
}
void myLinkedListFree(MyLinkedList* obj) {
myNodeFree(obj);
}
int main()
{
MyLinkedList* obj = myLinkedListCreate();
int param_1 = myLinkedListGet(obj, 5);
myLinkedListAddAtHead(obj, 1);
myLinkedListAddAtTail(obj, 3);
myLinkedListAddAtIndex(obj,1,2);
myLinkedListDeleteAtIndex(obj,1);
}
原因分析:
没有添加stdlib这个头文件
解决方案:
在第一行添加#include<stdlib.h>