c++ - 结构数组的动态内存分配

标签 c++

我想动态分配结构数组“student”

struct student
     { 
     char* name;
};
int main(int argc,char* argv[])
{
   if(argc==2)
   {
     student* sptr=new student[4]; 
     for(int i=0;i<atoi(argv[1]);i++)
     {
         cin>>*(*(sptr+i)).name;
     }
     for(int i=0;i<atoi(argv[1]);i++)
     {
         cout<<*(*(sptr+i)).name;
     }
   }
}

代码编译没有错误,但在运行时,输入名字后是 说“段错误(核心已转储)”并停止。我哪里出错了?

最佳答案

  1. 你不需要一个结构来只保存一个字符串
  2. 你不需要在每次迭代中调用atoi
  3. 您需要分配内存以接收用户输入

工作代码如下:

int main(int argc,char* argv[])
{
    // Exit if wrong number of arguments
    if(argc != 2)
    {
        cout << "Incorrect number of argements";
        return 1;
    }

    // Convert argument from ASCII to int once
    int numberOfValues = atoi(argv[1]);
    // Create array of strings (pointer of pointers to characters)
    char** ppValues = new char*[numberOfValues];

    // Loop to collect strings
    for (int i = 0; i < numberOfValues; i++)
    {
        // Local variable to collect one string
        char buffer[1024];
        cin >> buffer;
        // Allocate memory in one of the array entries to hold the current entry
        ppValues[i] = new char[strlen(buffer) + 1];
        // Copy value from temp string to final string location
        strcpy(ppValues[i], buffer);
    }

    for (int i = 0; i < numberOfValues; i++)
    {
        cout << ppValues[i];
    }

    return 0;
} 

关于c++ - 结构数组的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35969367/

相关文章:

c++ - 是否可以直接识别覆盖整个堆栈的错误代码?

c++ - 嵌入式 C++ 中零大小数组的替代方案

c++ - 模板类成员函数的默认参数

c++ - LTO for clang 可以跨 C 和 C++ 方法优化吗

c++ - 为什么 vector 和 map 搜索比静态比较慢得多

c++ - 用一个字节表示一个 float

c++ - 来自 .ply 文件的 Garbage Face 相关信息

c++ - g++ arm-none-eabi 从 4.9 升级到 gcc 8.2。生成的二进制文件不再适合闪存

C++ 代码仅在程序从终端运行时执行

c++ - 使用UDP套接字发送时如何设置源地址