How to convert details on a Unity Terrain to GameObjects?

Hi, I’m trying to make a script that converts the details on a Unity Terrain to GameObjects with their position and rotation for my game. I made some tests and tried some things but it deosn’t work it always makes me this stange circle with infinite grass prefabs in it that makes the scene crash. I don’t understand why it does that :

Here is my Code :

using UnityEngine;

public class InstantiateDetailsOnTerrain : MonoBehaviour
{
    public Terrain terrain;
    public GameObject prefab;

    void Start()
    {
        TerrainData terrainData = terrain.terrainData;

        int detailWidth = terrainData.detailWidth;
        int detailHeight = terrainData.detailHeight;

        for (int detailLayer = 0; detailLayer < terrainData.detailPrototypes.Length; detailLayer++)
        {
            int[,] detailLayerData = terrainData.GetDetailLayer(0, 0, detailWidth, detailHeight, detailLayer);

            for (int y = 0; y < detailHeight; y++)
            {
                for (int x = 0; x < detailWidth; x++)
                {
                    if (detailLayerData[x, y] > 0)
                    {
                        Vector3 worldPosition = GridToWorldPosition(x, y, terrainData);

                        Instantiate(prefab, worldPosition, Quaternion.identity);
                    }
                }
            }
        }
    }

    Vector3 GridToWorldPosition(int x, int y, TerrainData terrainData)
    {
        float xPos = (x / (float)terrainData.detailWidth) * terrainData.size.x;
        float yPos = terrainData.GetHeight(x, y); 
        float zPos = (y / (float)terrainData.detailHeight) * terrainData.size.z;

        Vector3 worldPosition = new Vector3(xPos, yPos, zPos) + terrain.transform.position;

        return worldPosition;
    }
}

Does anyone have a solution ?