ここでは、基本的に文字列を入力し、それを個々の単語に分割し、各単語を char ポインターにptr[i]
割り当てようとしています。次のコードを実行すると、複数の単語の文字列を入力すると、 が表示されますSegmentation fault (core dumped)
。
デバッグには gdb を使用しました。しかし、while ループを 2 回目にアクセスした後、それに対する解決策は、使用する前
Program received signal SIGSEGV, Segmentation fault.
0x0000003b64a81321 in __strlen_sse2 () from /lib64/libc.so.6
にそれぞれにメモリを割り当てることです。しかし、ptr[0] にメモリ割り当てが必要ないのはなぜでしょうか。ptr[0] にメモリを割り当てないと、他の何かが上書きされる可能性はありますか? 私は好奇心からそれを求めています.メモリを割り当てる方が常に良いことを知っています. コードは次のとおりです。ptr[i]
strcpy(ptr[i],cp);
ptr[i]=new char[sizeof(cp)];
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int main()
{
int i,j;
string s1;
getline(cin,s1);
char s[100],*ptr[10];
strcpy(s,s1.c_str());
char *cp;
cout<<"string is: "<<s1<<endl;
cp=strtok(s," ");
i=0;
while(cp!=NULL)
{ cout<<cp<<endl;
strcpy(ptr[i],cp);
cp=strtok(NULL," ");
i++;
}
for(j=0;j<i;j++)
{ cout<<ptr[j]<<endl;
}
return 0;
}