Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
第二个数组指针中的值错误 我开始学习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 - Fatal编程技术网 >c; 对于(i=0;c!='@';cin>>c){ 如果(!(isdigit(c))){ ps=新字符[i+1]; tablica=ps; tablica[i]=c; cout,c++,pointers,C++,Pointers" /> >c; 对于(i=0;c!='@';cin>>c){ 如果(!(isdigit(c))){ ps=新字符[i+1]; tablica=ps; tablica[i]=c; cout,c++,pointers,C++,Pointers" />

第二个数组指针中的值错误 我开始学习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];