Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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++;用于生成数组的指针 我是C++新手。我在玩指针。。。 此代码使用char ptr作为数组 #‎include‬<iostream> using namespace std; int main (){ cout << "Playground "<<endl; const short max=10; char * str=new char ; for (short i=0;i<max;i++) *(str+i)=char(i+100); for (short i=0;i<max;i++) cout <<str+i<< char(3) <<endl; for(short i=0;i<max;i++) delete (str+i); return 0; }_C++_Arrays_Pointers - Fatal编程技术网

C++;用于生成数组的指针 我是C++新手。我在玩指针。。。 此代码使用char ptr作为数组 #‎include‬<iostream> using namespace std; int main (){ cout << "Playground "<<endl; const short max=10; char * str=new char ; for (short i=0;i<max;i++) *(str+i)=char(i+100); for (short i=0;i<max;i++) cout <<str+i<< char(3) <<endl; for(short i=0;i<max;i++) delete (str+i); return 0; }

C++;用于生成数组的指针 我是C++新手。我在玩指针。。。 此代码使用char ptr作为数组 #‎include‬<iostream> using namespace std; int main (){ cout << "Playground "<<endl; const short max=10; char * str=new char ; for (short i=0;i<max;i++) *(str+i)=char(i+100); for (short i=0;i<max;i++) cout <<str+i<< char(3) <<endl; for(short i=0;i<max;i++) delete (str+i); return 0; },c++,arrays,pointers,C++,Arrays,Pointers,我收到了这个错误消息 try #0 *** Error in `./p': free(): invalid pointer: 0x09d90009 *** Aborted (core dumped) try #1 *** Error in `./p': free(): invalid pointer: 0x08453009 *** Aborted (core dumped) try #2 *** Error in `./p': free(): invalid pointer: 0x0863c

我收到了这个错误消息

try #0
*** Error in `./p': free(): invalid pointer: 0x09d90009 ***
Aborted (core dumped)

try #1
*** Error in `./p': free(): invalid pointer: 0x08453009 ***
Aborted (core dumped)

try #2
*** Error in `./p': free(): invalid pointer: 0x0863c009 ***
Aborted (core dumped)

etc ...
由于无效指针不断变化,我感觉对象没有被删除或垃圾收集,每次运行代码时,我都会使用另一个内存区域

最后我开始了解为什么正则数组更好

*从一开始,内存中就为数据保留了一个连续的空间

*不需要担心删除


这些只是我的猜测…

您有越界访问权限:

char* str = new char; // single element
应该是

char* str=new char[max]; // array of char
你必须释放内存

delete [] str;

但为了避免手动管理内存,您可以使用
std::string
std::vector

您具有越界访问权限:

char* str = new char; // single element
应该是

char* str=new char[max]; // array of char
你必须释放内存

delete [] str;

但是,为了避免手动管理内存,您可以使用
std::string
std::vector
您只需要进行一次动态内存分配,并且只需要1个字符,但是您在最后一个for循环中多次删除动态分配的内存-您只能对每个新的执行一次删除


此外,在第一个for循环中,您将新的字符值分配给您分配的内存之外的内存,这意味着您正在覆盖不属于您的内存。

您只进行一次动态内存分配,并且只分配一个字符,但是您在最后一个for循环中多次删除动态分配的内存—您只能对每个新内存执行一次删除


此外,在第一个for循环中,您将新的char值分配给您分配的内存之外的内存,这意味着您正在覆盖不属于您的内存。

delete(str)
将释放在原始地址分配的内存。添加
i
会导致指针无效。您可能想看看
str
处的“字符串”有多大。
newchar
到底放了什么?这根绳子够大吗?如果是这样,编译器如何知道它必须有多大?也许它只是在那里放置一个
char
,在这种情况下,其余的字符将去哪里?
delete(str)
将释放在原始地址分配的内存。添加
i
会导致指针无效。您可能想看看
str
处的“字符串”有多大。
newchar
到底放了什么?这根绳子够大吗?如果是这样,编译器如何知道它必须有多大?也许它只是在那里放置了一个
char
,在这种情况下,其余的字符将去哪里???