[英]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 A
的x
指針,因此最初它指向內存中未分配的一些未定義區域。
因此,通過執行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.