簡體   English   中英

下面的代碼給分段錯誤

[英]following code is giving segmentation fault

我正在嘗試執行以下代碼,這給了我分段錯誤。 我在做什么錯誤或我缺少任何部分? 可以通過其他方式實現此代碼嗎?

碼:

#include <iostream>
#include "string.h"

using namespace std;

struct A {
    char* a;
};

int main()
{
    struct A *x;
    x->a = "soumya";
    char* str = "soumya";
    cout<<str<<endl<<(char*)x->a<<endl;
   // if(strcmp(x->a,str)!=0)
  //  {
   //     cout<<"not same"<<endl;
   // }

    return 0;
}

您沒有初始化指向struct Ax指針,因此最初它指向內存中未分配的一些未定義區域。

因此,通過執行x->a = "soumya"; 您正在嘗試寫入此空間,這會導致分段錯誤。

你可以改變

struct A *x;

struct A *x = malloc(sizeof(struct A));
// Don't forget to free this memory if your program is going to run for some time

或者

struct A x;

並將每個x->a替換為xa在這種情況下,內存是在堆棧中分配的,因此它將在方法結束時自動釋放。

我們需要解決幾個問題。

1)通常,不要再在C ++中使用原始指針。

2)您實際上並未為*x分配任何內存。 這可以通過執行以下操作來實現:

struct A *x = new A;

請記住在適當的時候調用delete x來釋放內存。

第三個問題是您沒有為x->a的內容分配內存。 最好的解決方案是使用std::string而不是char指針。 然后允許您執行x->a = "soumya";

你的結構應該是

struct A {
    std::string a;
};

這是一個更正的版本:

使用const char *因為您分配了常量字符串

使用struct A x; 具有分配的struct ,而不僅僅是指向未分配的內存的指針。

#include <iostream>
#include "string.h"
using namespace std;
struct A {
    const char* a;
};
int main()
{
    struct A x;
    x.a = "soumya";
    const char* str = "soumya";
    cout<<str<<endl<<x.a<<endl;

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM