2 baidu 24736703 baidu_24736703 于 2016.04.26 15:47 提问

为什么这个程序运行之后没显示呀,我感觉都对呀,求助

源码如下:
// ex8-4.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include
#include

using namespace std;

struct stringy{
char * str;
int ct;
};

char * set(stringy & st, char * ch);
void show(const stringy & st, int n=1);
void show(const char * ch, int n=1);

int _tmain(int argc, _TCHAR* argv[])
{
cout << "ksdfh" << endl;
stringy beany;
char testing[] = "Reality isn't what is used to be.";
char * pt=set(beany, testing);

delete[] pt;
show(beany);
show(beany, 2);
testing[0] = 'D';
testing[1] = 'U';
show(testing);
show(testing, 3);
show("done!");

return 0;

}

char * set(stringy & str, char * ch)
{
char * pt = new char[];
pt = ch;
str.str = pt;
str.ct = strlen(str.str);
return pt;
}

void show(const stringy & str, int n)
{
for (int i = 0; i < n; i++)
cout << str.str << endl;
}

void show(const char * ch, int n)
{
for (int i = 0; i < n; i++)
cout << ch << endl;
}
求解答一下,谢谢!

3个回答

u013651319
u013651319   2016.04.26 17:53

char * set(stringy & str, char * ch)
{
char * pt = new char[]; //new 1个有什么用
pt = ch;
str.str = pt;
str.ct = strlen(str.str);
return pt; //返回的ch 即传入的testing,主函数再delete 局部变量
}

baidu_24736703
baidu_24736703 回复vlaketang: 那这里应该怎么delete呀
一年多之前 回复
baidu_24736703
baidu_24736703 没结果,不是没结构,上面打错了字,不好意思
一年多之前 回复
baidu_24736703
baidu_24736703 加了char数组的size之后,还是没结构,正如我上面代码写得,我已经在主函数中delete了new内存了,但还是没有用
一年多之前 回复
u013651319
u013651319   2016.04.27 11:10

你主函数delete的不是new的内存,delete的是 set(stringy & str, char * ch) 返回值 是传入的参数的testing。逻辑有问题

u013651319
u013651319 而且结构体里边就是个指针,没有内存空间,如果delete了在set中的new,又是个野指针了
一年多之前 回复
qq_25867649
qq_25867649   2016.04.27 16:24

只有用new才能用delete释放,这是成对出现的 ,你把delete【】 pt; 这句屏了,重新编译就好了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!