第二个数组指针中的值错误 我开始学习C++,发现指针有一些问题。我不确定我做错了什么 char *tablica = NULL; char *ps; char c; int i; cin >> c; for (i = 0; c != '@'; cin >> c){ if (!(isdigit(c))){ ps = new char[i + 1]; tablica = ps; tablica[i] = c; cout << tablica[i] << " na i " << i << endl; i++; delete ps; } } for (int n = 0; n < i; n++){ if (islower(tablica[n])) cout << char(toupper(tablica[n])) << endl; else if (isupper(tablica[n])) cout << char(tolower(tablica[n])) << endl; else cout << tablica[n] << endl; } delete [] tablica; char*tablica=NULL; char*ps; 字符c; int i; cin>>c; 对于(i=0;c!='@';cin>>c){ 如果(!(isdigit(c))){ ps=新字符[i+1]; tablica=ps; tablica[i]=c; cout
当您执行第二个数组指针中的值错误 我开始学习C++,发现指针有一些问题。我不确定我做错了什么 char *tablica = NULL; char *ps; char c; int i; cin >> c; for (i = 0; c != '@'; cin >> c){ if (!(isdigit(c))){ ps = new char[i + 1]; tablica = ps; tablica[i] = c; cout << tablica[i] << " na i " << i << endl; i++; delete ps; } } for (int n = 0; n < i; n++){ if (islower(tablica[n])) cout << char(toupper(tablica[n])) << endl; else if (isupper(tablica[n])) cout << char(tolower(tablica[n])) << endl; else cout << tablica[n] << endl; } delete [] tablica; char*tablica=NULL; char*ps; 字符c; int i; cin>>c; 对于(i=0;c!='@';cin>>c){ 如果(!(isdigit(c))){ ps=新字符[i+1]; tablica=ps; tablica[i]=c; cout,c++,pointers,C++,Pointers,当您执行ps=newchar[i+1]时,您使ps指向您分配的一些内存 当您执行tablica=ps操作时,会使tablica指向同一内存。您不会复制ps指向的实际内存,只复制指针ps 这意味着,当您下一次迭代再次分配内存时,tablica(和ps)所指向的内存中读取和存储的内容将消失 在第二个循环中,tablica指向的内存不再存在,因为上一个循环中的最后一个循环确实删除了ps(这本身就是一个错误,应该是delete[]ps)。您尝试取消对程序不再拥有的内存的引用 除非您的练习是学习指针,否则
ps=newchar[i+1]
时,您使ps
指向您分配的一些内存
当您执行tablica=ps
操作时,会使tablica
指向同一内存。您不会复制ps
指向的实际内存,只复制指针ps
这意味着,当您下一次迭代再次分配内存时,tablica
(和ps
)所指向的内存中读取和存储的内容将消失
在第二个循环中,tablica
指向的内存不再存在,因为上一个循环中的最后一个循环确实删除了ps
(这本身就是一个错误,应该是delete[]ps
)。您尝试取消对程序不再拥有的内存的引用
除非您的练习是学习指针,否则请改用。您正在删除tablica指针引用的内存对象 而不是做
tablica = ps;
使用
这样它就可以为以后使用的阵列创建另一个内存段。使用问题是您已经删除了ps(tablica=ps)在第一个循环中;然后在第二个循环中,您引用在第一个循环中已经删除的tablica,并且,代替
char*tablica=NULL
,编写char*tablica=nullptr
。在使用“std”库之前,请先研究此url。好的……现在我知道有什么问题了。谢谢。但我的任务是使用指针……我想知道我是谁如果我能让它工作;)内存已经用完了…所以我不能再使用它了?@justyna要么不删除它,要么先复制一份。@justyna为什么每次循环都要分配一个新数组?数组是I+1
元素,但只存储在其中一个元素中。你想让数组包含所有被删除的字符吗什么?
tablica = new char[i+1];