[英]SIGSEGV, Segmentation fault
我是C ++的新手(從代碼中可以明顯看出),並且正在練習使用指針和數組以及結構進行動態內存分配。 我的代碼可以正常工作,直到它訪問“ growArray”函數,然后它給了我SIGSEGV錯誤。 我不知道為什么會這樣,因為據我所知我正在正確地將指針傳遞給指針,並且我還為新指針分配了空間。 是我的結構出現問題,還是傳遞指針出現問題,還是接收指針出現問題? 我希望這個問題有意義。
#include <iostream>
#include <string>
using namespace std;
struct FriendInfo
{
string name;
string address;
string number;
};
FriendInfo *growArray(FriendInfo *p_entry, int *size);
int main()
{
int curNum = 0;
int size = 2;
int userAnswer;
FriendInfo *p_friends = new FriendInfo[size];
cout << "Enter a friend's info?(1 for yes, 0 for no)\n";
cin >> userAnswer;
while (userAnswer != 0)
{
if (curNum == size)
{
p_friends = growArray (p_friends, &size);
}
cout << "What is your friend's name?\n";
cin >> p_friends[curNum].name;
cout << "What is your friend's address?\n";
cin >> p_friends[curNum].address;
cout << "What is your friend's number?\n";
cin >> p_friends[curNum].number;
curNum++;
cout << "Enter another friend? (1 for yes, 0 for no)\n";
cin >> userAnswer;
}
}
FriendInfo *growArray(FriendInfo *p_entry, int *size)
{
*size *= 2;
FriendInfo *p_new_friends = new FriendInfo[*size];
for (int i = 0; i < *size; ++i)
{
p_new_friends[i] = p_entry[i];
}
delete [] p_entry;
return p_new_friends;
}
您的問題是,即使p_entry
的size
為初始size
,您還是要將size
的值加倍。 將代碼更新為此:
FriendInfo *growArray(FriendInfo *p_entry, int *size)
{
int newSize = *size * 2;
FriendInfo *p_new_friends = new FriendInfo[newSize];
for (int i = 0; i < *size; ++i)
{
p_new_friends[i] = p_entry[i];
}
delete [] p_entry;
*size = newSize;
return p_new_friends;
}
在for循環中,您要在達到p_entry的大小(而不是大小)后停止
FriendInfo *growArray(FriendInfo *p_entry, int *size)
{
int orig_size = *size;
*size *= 2;
FriendInfo *p_new_friends = new FriendInfo[*size];
for (int i = 0; i < orig_size; ++i)
{
p_new_friends[i] = p_entry[i];
}
delete [] p_entry;
return p_new_friends;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.