gpt4 book ai didi

c++ - 删除结构中的第一个元素

转载 作者:行者123 更新时间:2023-12-01 15:12:50 27 4
gpt4 key购买 nike

我有一个代码,试图删除结构中的第一个ID。它曾经可以工作,但是现在只返回“ЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ”(重复的俄语字母)。我尝试重新安装VS,但没有帮助。我知道它有效,因为我在在线编译器上尝试过它。
这两个警告也指向删除功能,我猜这是问题所在。
警告C4156删除数组表达式而不使用“delete”的数组形式;数组形式替换
警告C4154删除数组表达式;转换为提供的指针

这是代码itslef:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <locale.h>
#include <iostream>
#pragma warning (disable: 4703) //disables warning of uninitialized variable j
using namespace std;
#define MAXDL 9
struct el_sp
{
char id[MAXDL];
struct el_sp* sled;
};
void vkl(struct el_sp** p, char t_id[]) //enters the entered ID's from keyboard into the struct
{
struct el_sp* pt,
* k, * j;
pt = (struct el_sp*)malloc(sizeof(struct el_sp));
strcpy_s(pt->id, t_id);
if (*p == NULL || strcmp(pt->id, (*p)->id) < 0)
{
pt->sled = *p; *p = pt;
}
else
{
k = *p;
while (k != NULL && strcmp(pt->id, k->id) >= 0)
{
j = k; k = k->sled;
}
j->sled = pt; pt->sled = k;
}
}

void pech_sp(struct el_sp* p) //prints the struct
{
struct el_sp* i;
char* o;
printf("\Result:\n");
for (i = p; i != NULL; i = i->sled)
puts(i->id);
}

int main() {
setlocale(LC_ALL, "RUS");
struct el_sp* p;
unsigned n;
unsigned i;
char t_id[MAXDL];

printf("\nEnter the amount of identificators\n n=");
scanf_s("%u", &n);
getchar();
p = NULL;
printf("Enter the identificators (press enter after each one)\n");
for (i = 1; i <= n; i++)
{
gets_s(t_id);
vkl(&p, t_id);
}
delete p->id;
pech_sp(p);
return 0;
}

附言无论我用什么代码,Delete都会做同样的事情
P.S.S.抱歉,格式化不正确,这是我们教授需要的格式

最佳答案

不要调用delete p->id。除了使您的程序崩溃之外,它没有任何用途:new既不分配程序,也不破坏程序所在的结构。

另外,切勿使用delete尝试释放malloc ed内存,或使用free释放new ed内存。

您是否要删除整个第一个节点?然后做类似的事情

el_sp *oldp = p;
p = p->next;
free(oldp);

实际上,删除中间的节点要容易一些。使用指向前一个元素( prev)和当前元素( cur)的“追逐指针”。如果 cur是您要删除的节点,只需执行
prev->next->next = cur->next;
delete cur;

(假设您使用 new分配节点,应该这样做!)

关于c++ - 删除结构中的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62418829/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com