繁体   English   中英

C ++程式当机

[英]C++ Program crashes

为什么后面的程序在“完成!”之后停留在随后的循环中,然后以崩溃告终?

#include <iostream>
using namespace std;
#include <cstring>

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

void set(stringy & s, const char * cs);
void show(const char * s, int times=1);
void show(const stringy & s, int times=1);

int main(){
    stringy beany;
    char testing[] = "Reality isn't what it is used to be.";
    set(beany, testing);
    show(beany);
    show(beany, 2);
    testing[0] = 'D';
    testing[1] = 'u';

    show(testing);
    show(testing, 3);
    show("Done!");

    return 0;
}

void set(stringy & s, const char * cs){
    s.ct = strlen(cs);
    strcpy(s.str, cs);
}

void show(const char * s, int times){
    while (times-- > 0){
        cout << s << endl;
    }
}

void show(const stringy & s, int times){
    show(s.str, times);
}

您做了很多strcpy ,但是您的malloc在哪里?

如果使用C ++,则应真正使用std :: string来避免此类情况。

复制前为字符串分配内存

void set(stringy & s, const char * cs){
    s.ct = strlen(cs);
    s.str = new char[s.ct+1];
    strcpy(s.str, cs);
}

释放内存

delete[] beany.str;

各种问题:

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

// [snip]

stringy beany;
char testing[] = "Reality isn't what it is used to be.";
set(beany, testing);

void set(stringy & s, const char * cs){
    s.ct = strlen(cs);
    strcpy(s.str, cs);
}

在调用strcpys.str只是一个野指针。 它没有指向任何有效的东西。

这可能是家庭作业,但如果不是,则应使用std::string而不是raw char* 如果需要使用原始char* ,则需要分配空间(使用new指针,或者更好的是使用智能指针),该指针指向该空间。 您不能只是将字符串复制到超空间中并期望它起作用。

运行程序时出现分段错误。 您需要在调用strcpy之前为s.str分配内存。

 void set(stringy & s, const char * cs){
     s.ct = strlen(cs);
     strcpy(s.str, cs);
 }

s.str未分配。 你需要做一个

s.str = malloc(s.ct);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM