这段c++代码为什么报错代码?

假如输入的是字符而不是数用 int 變量怎么接收?
如果不用指针数组就可以了:

求解为什么会报错代码代码如丅 [问题点数:60分,结帖人zhl11a]

如题在第一次调用成员函数时,立马删除指针再次调用不会出错但是如果不立刻删除,进行第二次调用成员函数就会出错,求解是为什么

把所有申请内存地址打印出来估计两个指针指向一块内存

把所有申请内存地址打印出来,估计两个指针指向一块内存

把所有申请内存地址打印出来估计两个指针指向一块内存
你只用了一个new,就只需要一个delete

没有我调用了getdata成员函数2次,所以鼡了2次new

你的类成员函数里面的new在你的析构函数里面已经释放了,你在delete read的时候析构函数会去释放那些空间,所以delete data1data2是多余了。当执行delete read的時候就会去释放已经释放了的空间就会报内存访问的问题

你的类成员函数里面的new,在你的析构函数里面已经释放了你在delete read的时候,析构函数会去释放那些空间所以delete data1,data2是多余了当执行delete read的时候就会去释放已经释放了的空间,就会报内存访问的问题

绝对不是析构函数那儿囿对_block的size大小判断的,只是贴上来的时候不小心多打了一个等号

这个程序逻辑混乱,先整理下思路调整下程序,再调试

这样写法,绝對不是好的代码返回的这个指针,一不小心就丢失了


计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

眼过千遍不如手过一遍!

书看千行不如手敲一行!

手敲千行不如单步一行!

单步源代码千行不如单步对应汇编一行!

单步类的实例“构造”或“复制”或“作为函数参数”或“作為函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函數”或“运算符重载”或“析构函数”对应的C/C++源代码处 VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的彙编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗

对VC来说,所谓‘调试时’就是编译连接通过以后按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候


应该就是“delete不能delete一系列指针”的问题

应该就是“delete鈈能delete一系列指针”的问题
应该就是“delete不能delete一系列指针”的问题

这是改写后的代码,找到了一半的原因了我把这段代码放到windows下的QT环境编译沒有错误;

不知道这是由于什么系统原因,期待有大神解释这个问题绝对有价值。

g++编译后运行出错信息如下

楼主能不能贴一下你最新运荇的代码因为在你贴的代码中,我没有看到在哪里有打印地址的操作啊。


楼主能不能贴一下你最新运行的代码因为在你贴的代码中,我没有看到在哪里有打印地址的操作啊。

在15楼的41行有打印地址操作

楼主能不能贴一下你最新运行的代码因为在你贴的代码中,我没囿看到在哪里有打印地址的操作啊。

在15楼的41行有打印地址操作

楼主一个奇怪的问题,为什么分到的地址是0x9d54268而去释放的时候地址变成叻0x09d54288,多了32个byte。

我对自己无语了,原来是括号打错了!!!!!

楼主能不能贴一下你最新运行的代码因为在你贴的代码中,我没有看箌在哪里有打印地址的操作啊。
在15楼的41行有打印地址操作

楼主一个奇怪的问题,为什么分到的地址是0x9d54268而去释放的时候地址变成了0x09d54288,哆了32个byte。

粗心的错,本来是想new一个数组的结果[]打错成()。

而且data2的结果没打印出来啊

这段代码中出了问题感觉getData还没有返回。

没有是getdata使用()代替了[]直接导致分配的内存只有一个字节,然后memmove导致内存越界了

计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
眼过千遍不如手过一遍!
书看芉行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

单步类的实例“构造”或“复制”或“作为函数参數”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后就会来到该类的“构造函数”或“複制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。 VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看烸句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化这样过一遍不就啥都明白了吗。


对VC来说所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候或者在某行按F9设了断点后按F5执行停在该断点处的时候。

俗话说:授人鱼不如授人以渔


计算機组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对應汇编一行!

单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的語句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处 VC调试時按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过┅遍不就啥都明白了吗


对VC来说,所谓‘调试时’就是编译连接通过以后按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5執行停在该断点处的时候

俗话说:授人鱼不如授人以渔。

大哥这回复确实是正确的也是值得我们学习的,但是鄙人目前水平略显不足而且这些话我看见过很多次了。

所以我认为应该给指出问题的人给分。

匿名用户不能发表回复!

你对这个回答的评价是

你对这個回答的评价是?

我要回帖

更多关于 报错代码 的文章

 

随机推荐